A modern web application for language learning, built with cutting-edge technologies including React 19 and Next.js 15.
- π― Interactive language learning exercises
- π¨ Modern, responsive UI design
- π Secure authentication with Clerk
- β‘ Optimized performance with Next.js
- π± Mobile-first approach
- Framework: Next.js 15 with App Router and Server Actions
- Frontend: React 19, TypeScript
- Authentication: Clerk
- Styling: Tailwind CSS, shadcn/ui components
- Database: Neon (Serverless Postgres)
- ORM: Drizzle ORM
- Validation: Zod
- Package Manager: pnpm
- Deployment: Vercel
- Clone the repository
git clone https://github.com/frshaad/lingo.git
cd lingo- Install dependencies
pnpm install- Set up environment variables
cp .env.example .envAdd the following required environment variables to your .env file:
NEXT_PUBLIC_APP_URL='http://localhost:3000' # https://lingo-kohl-gamma.vercel.app/
# Clerk Authentication (Required)
NEXT_PUBLIC_CLERK_PUBLISHABLE_KEY= # Your Clerk public key
CLERK_SECRET_KEY= # Your Clerk secret key
# Clerk Authentication URLs (Required)
NEXT_PUBLIC_CLERK_SIGN_IN_URL= # Default: "/"
NEXT_PUBLIC_CLERK_SIGN_UP_URL= # Default: "/"
NEXT_PUBLIC_CLERK_SIGN_IN_FALLBACK_REDIRECT_URL= # Default: "/learn"
NEXT_PUBLIC_CLERK_SIGN_UP_FALLBACK_REDIRECT_URL= # Default: "/learn"
NEXT_PUBLIC_CLERK_AFTER_SIGN_OUT_URL= # Default: "/"
# Database (Required)
DATABASE_URL= # Your PostgreSQL connection string from Neon.techImportant: Always use the validated
envobject from@/lib/env.tsinstead of accessingprocess.envdirectly. This ensures type safety and runtime validation of environment variables.
// β Don't use process.env directly
const dbUrl = process.env.DATABASE_URL
// β
Do use the validated env object
import env from '@/lib/env'
const dbUrl = env.DATABASE_URL- Run the development server
pnpm devOpen http://localhost:3000 with your browser to see the result.
src/
βββ app/
βββ components/
β βββ ui/ # shadcn/ui components
βββ lib/
β βββ db/ # Drizzle schema and config
![]() |
![]() |
|---|---|
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
I'm a junior developer passionate about creating user-friendly web applications. This project showcases my abilities with modern web technologies and my commitment to writing clean, maintainable code.
This project is open source and available under the MIT License.
Built with β€οΈ by Farshad







