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 .env
Add 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.tech
Important: Always use the validated
env
object from@/lib/env.ts
instead of accessingprocess.env
directly. 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 dev
Open 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