An internal wiki for a 10-week "vibe coding" programme. Track progress through structured levels, submit demos, earn badges, and collaborate with fellow participants.
- Weeks 1-10 Curriculum: Structured content organized into 3 levels (Foundation, Intermediate, Advanced)
- User Profiles: Sign in with Google, customize your profile, share your project
- Demo Submissions: Submit demos each week and get community feedback
- Voting System: Upvote/downvote demos from peers
- Badge System: Earn badges for achievements, view leaderboard
- Admin Dashboard: Manage content, award badges, control user roles
- Search: Find weeks, demos, and people
- Optional Slack Integration: Notifications for new content, badges, and demos
- Framework: Next.js 14 (App Router) + TypeScript
- Styling: Tailwind CSS + shadcn/ui
- Database & Auth: Supabase (PostgreSQL + Auth)
- Deployment: Docker + Vercel
- Docker and Docker Compose
- A Supabase project (free tier works)
- Google OAuth credentials (via Supabase Auth)
# Clone the repository
git clone <your-repo-url>
cd vibe-coding-academy
# Copy environment example
cp .env.local.example .env.local- Create a new project at supabase.com
- Go to Project Settings > API to get your credentials
- Update
.env.localwith your Supabase credentials:
NEXT_PUBLIC_SUPABASE_URL=https://your-project.supabase.co
NEXT_PUBLIC_SUPABASE_ANON_KEY=your-anon-key
SUPABASE_SERVICE_ROLE_KEY=your-service-role-key- In Supabase Dashboard, go to Authentication > Providers
- Enable Google provider
- Create OAuth credentials in Google Cloud Console
- Add the credentials to Supabase
In the Supabase SQL Editor, run the migrations:
- Copy contents of
supabase/migrations/00001_initial_schema.sql - Execute in SQL Editor
- Copy contents of
supabase/seed.sql - Execute in SQL Editor
# Build and start the container
docker-compose up --build
# Or run in detached mode
docker-compose up -d --buildThe app will be available at http://localhost:8080
After signing in for the first time:
- Go to Supabase Dashboard > Table Editor > profiles
- Find your user and change
rolefrommembertoadmin
# Development
docker-compose up # Start dev server
docker-compose down # Stop containers
# If running locally (not recommended without Docker):
npm run dev # Start dev server
npm run build # Build for production
npm run start # Start production server
npm run lint # Run ESLint
npm run typecheck # Run TypeScript checks
npm run test # Run Playwright tests├── app/
│ ├── (auth)/ # Auth pages (login)
│ ├── (dashboard)/ # Main app pages
│ │ ├── admin/ # Admin panel
│ │ ├── badges/ # Badges & leaderboard
│ │ ├── people/ # User directory
│ │ ├── profile/ # User profile
│ │ ├── projects/ # Projects list
│ │ ├── search/ # Search page
│ │ └── weeks/ # Curriculum pages
│ ├── auth/callback/ # OAuth callback
│ └── layout.tsx # Root layout
├── components/
│ ├── layout/ # Navbar, Footer
│ ├── providers/ # Auth provider
│ ├── ui/ # shadcn/ui components
│ └── weeks/ # Week-specific components
├── lib/
│ ├── supabase/ # Supabase clients
│ ├── slack.ts # Slack notifications
│ └── utils.ts # Utility functions
├── supabase/
│ ├── migrations/ # SQL migrations
│ └── seed.sql # Seed data
├── tests/ # Playwright tests
└── types/ # TypeScript types
- member: Can view content, submit demos, vote, manage own profile/project
- facilitator: All member permissions + edit weeks, award badges
- admin: All facilitator permissions + manage user roles
| Variable | Description | Required |
|---|---|---|
NEXT_PUBLIC_SUPABASE_URL |
Supabase project URL | Yes |
NEXT_PUBLIC_SUPABASE_ANON_KEY |
Supabase anonymous key | Yes |
SUPABASE_SERVICE_ROLE_KEY |
Supabase service role key | Yes |
SLACK_WEBHOOK_URL |
Slack incoming webhook URL | No |
To enable Slack notifications:
- Create an Incoming Webhook in your Slack workspace
- Add the webhook URL to
.env.local:
SLACK_WEBHOOK_URL=https://hooks.slack.com/services/xxx/yyy/zzzNotifications will be sent for:
- New week content published
- Badges awarded
- Demos submitted
- Push your code to GitHub
- Import the project in Vercel
- Add environment variables in Vercel project settings
- Deploy
# Or use Vercel CLI
npm i -g vercel
vercel# Start the dev server first, then run tests
docker-compose up -d
npx playwright test
# Or run tests with UI
npx playwright test --ui- Create a feature branch
- Make changes
- Run lint and typecheck
- Submit a pull request
Private - Internal use only