An open-source JavaScript/TypeScript interview prep platform
Website • Features • Quick Start • Architecture
Requirements: Node.js 18+, Yarn, Docker Desktop
git clone https://github.com/msiric/memoized.git
cd memoized
yarn install
yarn setup:dev
yarn dev
Frontend → 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)
_lessons.json metadata define curriculum structureyarn sync:all parses MDX, serializes with Shiki highlighting, stores in PostgreSQLyarn index indexes lessons in MeiliSearch for searchbash
git clone https://github.com/msiric/memoized.git
cd memoized
yarn install
bash
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"
bash
docker-compose up -d # PostgreSQL + MeiliSearch
bash
yarn migrate:dev
bash
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 fromsrc/samples/is copied for open-source development.
bash
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/
yarn setup:content - Copy sample contentyarn sync:all:dev - Sync to local databaseyarn dev - Start development serverIssues and PRs welcome.