A Reddit-like platform for Albanian developers built with Nuxt 4, Nuxt UI 4, and Firebase.
- 🔥 Nuxt 4 - Latest version with enhanced performance
- 🎨 Nuxt UI 4 - Beautiful, accessible components
- 🔐 Multiple Auth Options - Firebase Email/Password + Base.al OAuth
- 💾 Firestore - Real-time NoSQL database
- 🚀 Firebase Hosting - Serverless deployment
- 📱 Responsive Design - Works on all devices
- ⚡ Real-time Features - Live updates and interactions
- 🔗 OAuth Integration - Sign in with Base.al (Albanian OAuth provider)
- Create and join communities
- Post text, links, and images
- Upvote/downvote system
- Nested comments (coming soon)
- User profiles with karma
- Community moderation
- Feed sorting (hot, new, top)
- Node.js 18+ and npm
- Firebase project with Firestore enabled
- Base.al OAuth credentials (optional)
Create a .env file with:
# Firebase Client Config
NUXT_PUBLIC_FIREBASE_API_KEY=your_api_key
NUXT_PUBLIC_FIREBASE_AUTH_DOMAIN=your_auth_domain
NUXT_PUBLIC_FIREBASE_PROJECT_ID=your_project_id
NUXT_PUBLIC_FIREBASE_STORAGE_BUCKET=your_storage_bucket
NUXT_PUBLIC_FIREBASE_MESSAGING_SENDER_ID=your_sender_id
NUXT_PUBLIC_FIREBASE_APP_ID=your_app_id
# Firebase Admin (Server-side)
FIREBASE_PRIVATE_KEY=your_private_key
FIREBASE_CLIENT_EMAIL=your_client_email
# Base.al OAuth (Optional - for OAuth login)
OAUTH_BASE_CLIENT_ID=your_client_id
OAUTH_BASE_CLIENT_SECRET=your_client_secret
OAUTH_BASE_REDIRECT_URI=your_redirect_uri
NUXT_PUBLIC_OAUTH_BASE_AUTHORIZE_URL=https://accounts.base.al/oauth/authorize
NUXT_PUBLIC_OAUTH_BASE_TOKEN_URL=https://accounts.base.al/oauth/token
NUXT_PUBLIC_OAUTH_BASE_USERINFO_URL=https://accounts.base.al/oauth/userinfo# Install dependencies
npm install
# Start development server
npm run dev- Create Firebase Project at https://console.firebase.google.com
- Enable Firestore - Go to Firestore Database and create database
- Enable Authentication:
- Go to Authentication → Sign-in method
- Enable Email/Password provider
- Deploy Firestore Rules:
firebase deploy --only firestore:rules
- Get Service Account Key:
- Go to Project Settings → Service Accounts
- Generate new private key
- Add credentials to
.env
To view your database in Drizzle Studio:
npm run db:studio# Build for production
npm run build
# Deploy to Firebase
firebase deploy- Authentication - Enable Email/Password provider
- Cloud Functions - For server-side rendering
- Hosting - For static assets
- Storage (optional) - For image uploads
- Create a Cloud SQL PostgreSQL instance
- Create a database
- Add connection string to
.env - Run migrations
├── components/ # Vue components
├── composables/ # Composable functions
├── layouts/ # App layouts
├── middleware/ # Route middleware
├── pages/ # App pages/routes
├── plugins/ # Nuxt plugins
├── server/ # Server-side code
│ ├── api/ # API endpoints
│ ├── database/ # Database schema
│ ├── middleware/ # Server middleware
│ └── utils/ # Server utilities
├── drizzle.config.ts # Drizzle ORM config
├── nuxt.config.ts # Nuxt configuration
└── firebase.json # Firebase config
# Run dev server
npm run dev
# Type checking
npm run typecheck
# Lint code
npm run lint
# Generate types
npm run postinstall- Framework: Nuxt 4
- UI Library: Nuxt UI 4 (Tailwind CSS)
- Authentication: Firebase Auth + Base.al OAuth
- Database: Firestore (Firebase)
- Hosting: Firebase Hosting + Cloud Functions
- Language: TypeScript
The app supports two authentication methods:
Traditional email and password authentication powered by Firebase.
OAuth integration with Base.al, the Albanian authentication provider. Users can sign in with their Base.al account.
OAuth Flow:
- User clicks "Continue with Base"
- Redirected to Base.al authorization page
- After approval, callback creates/links Firebase account
- User automatically signed in
users/{userId}
- email, username, displayName, avatar, bio, karma
- createdAt, updatedAt
communities/{communityId}
- name, displayName, description, icon, banner
- memberCount, creatorId
- createdAt, updatedAt
posts/{postId}
- title, content, type, url
- authorId, communityId
- upvotes, downvotes, commentCount
- isDeleted, createdAt, updatedAt
postVotes/{userId}_{postId}
- userId, postId, value (1 or -1)
- createdAt
communityMembers/{userId}_{communityId}
- userId, communityId, role
- joinedAt
MIT