An open-source JavaScript/TypeScript interview prep platform
Website • Features • Quick Start • Architecture
- Structured courses: JavaScript and Data Structures & Algorithms tracks with progressive curriculum
- Practice problems: 450+ coding and theory problems linked to lessons with difficulty ratings
- Progress tracking: Mark lessons and problems as complete with visual analytics dashboard
- Premium content system: Free and premium access tiers with Stripe subscription management
- Full-text search: Fast, relevant search across all content powered by MeiliSearch
- OAuth authentication: Sign in with GitHub or Google via NextAuth.js
- MDX content: Rich lessons with syntax-highlighted code, interactive components and custom annotations
- Pre-compiled content: MDX serialized at build/sync time for fast page loads
- Resources library: Standalone reference materials for data structures, async patterns and more
Requirements: Node.js 18+, Yarn, Docker Desktop
git clone https://github.com/msiric/memoized.git
cd memoized
yarn install
yarn setup:dev
yarn devFrontend → Next.js 14 (App Router) + React + Tailwind CSS
API Layer → Server Actions + Route Handlers + NextAuth.js
Services → Course · Lesson · Problem · Resource · Subscription · User
Data → PostgreSQL (Prisma ORM) + MeiliSearch
Integrations → Stripe (Payments) · Resend (Email) · Sentry (Monitoring)
- Courses → Sections → Lessons → Problems
- Resources: Standalone reference content (linked to lessons optionally)
- Users → Accounts (OAuth) → Customers (Stripe) → Subscriptions
- Progress: UserLessonProgress + UserProblemProgress tracking
- MDX files with
_lessons.jsonmetadata define curriculum structure yarn sync:allparses MDX, serializes with Shiki highlighting, stores in PostgreSQLyarn indexindexes lessons in MeiliSearch for search- Pre-serialized content hydrates instantly on page load
-
Clone and install:
git clone https://github.com/msiric/memoized.git cd memoized yarn install -
Environment setup:
cp .env.example .env.local
Update database URL in
.env.local:DATABASE_URL="postgresql://postgres:postgres@localhost:5432/postgres" MEILISEARCH_HOST="http://localhost:7700" MEILISEARCH_MASTER_KEY="dev-master-key" -
Start services:
docker-compose up -d # PostgreSQL + MeiliSearch -
Database setup:
yarn migrate:dev
-
Content setup:
yarn setup:content # Auto-detects content source (see below) yarn sync:all:dev # Syncs all content to database
Content Sources (auto-detected by
setup:content):- Premium content: If
../memoized-contentexists as a sibling directory, symlinks are created automatically. Changes are instantly reflected - just runyarn sync:all:devafter editing. - Sample content: If no premium content is found, sample content from
src/samples/is copied for open-source development.
- Premium content: If
-
Start development:
yarn dev
| Category | Technology |
|---|---|
| Framework | Next.js 14 (App Router) |
| Language | TypeScript |
| Database | PostgreSQL + Prisma |
| Search | MeiliSearch |
| Styling | Tailwind CSS |
| Content | MDX + Shiki |
| Auth | NextAuth.js (GitHub, Google) |
| Payments | Stripe |
| Resend | |
| Testing | Vitest |
| Monitoring | Sentry |
| Deployment | Vercel |
memoized/
├── src/
│ ├── app/ # Next.js App Router (pages, API routes)
│ ├── components/ # React components
│ ├── services/ # Business logic (course, lesson, problem, subscription)
│ ├── scripts/ # Sync, index and setup scripts
│ ├── mdx/ # MDX plugins (remark, rehype, recma)
│ ├── content/ # Working directory for course content
│ ├── samples/ # Sample content for local development
│ ├── lib/ # Prisma, Stripe, MeiliSearch, Resend clients
│ ├── hooks/ # React hooks
│ ├── contexts/ # Zustand stores (auth, progress)
│ ├── constants/ # App constants and curriculum config
│ └── types/ # TypeScript types
├── prisma/ # Database schema and migrations
├── public/ # Static assets (images, icons)
└── docker-compose.yml # Local PostgreSQL + MeiliSearch
Memoized uses a hybrid content architecture. Sample content is provided for local development:
src/samples/
├── js-track/
│ ├── page.mdx # Course overview
│ └── core-fundamentals/
│ ├── _lessons.json # Lesson metadata + problems
│ └── variables/
│ └── page.mdx # Lesson content
└── dsa-track/
- Setup:
yarn setup:content- Copy sample content - Sync:
yarn sync:all:dev- Sync to local database - Develop:
yarn dev- Start development server
Issues and PRs welcome.