A spaced repetition flashcard application designed to help you prepare for technical interviews.
- Create and manage flashcards for different technical topics
- Spaced repetition system for optimal learning
- Category-based organization
- Progress tracking
- Search functionality
- Due cards filtering
- Frontend: React, TypeScript, Tailwind CSS, Shadcn/ui
- Backend: Express.js, TypeScript
- Database: PostgreSQL with Drizzle ORM
- Authentication: Passport.js
- Content Management: Sanity.io
- Clone the project
- Install dependencies:
npm install
- Set up your database credentials in environment variables
- Start the development server:
npm run dev
npm run dev
- Start development servernpm run build
- Build for productionnpm run start
- Start production servernpm run check
- Type check with TypeScriptnpm run db:push
- Push database schema changes
/client
- React frontend application/server
- Express.js backend/shared
- Shared types and utilities/sanity
- Sanity CMS configuration
Required environment variables:
DATABASE_URL
- PostgreSQL connection stringSESSION_SECRET
- Session secret for authenticationSANITY_PROJECT_ID
- Sanity project IDSANITY_DATASET
- Sanity dataset name
MIT
A full-stack application for interview preparation using spaced repetition flashcards. Built with React, Express, and TypeScript.
├── client/ # Frontend React application
│ ├── src/
│ │ ├── components/ # React components
│ │ ├── hooks/ # Custom React hooks
│ │ ├── lib/ # Utility functions
│ │ └── pages/ # Page components
├── server/ # Backend Express server
│ ├── auth.ts # Authentication logic
│ ├── routes.ts # API routes
│ └── storage.ts # Database operations
└── shared/ # Shared types and utilities
- User authentication (Google, GitHub, Local)
- Spaced repetition algorithm for optimized learning
- Category-based flashcard organization
- Progress tracking
- Search functionality
- Due cards filtering
FlashcardComponent
: Displays individual flashcards with flip animationCategoryFilter
: Filters flashcards by categorySearchBar
: Enables flashcard searchInterestSelector
: User interest selection during onboarding
- Multiple authentication strategies (Google, GitHub, Local)
- Protected routes using session-based authentication
- Secure password handling
- SuperMemo 2 algorithm implementation
- Quality ratings: Easy, Hard, Wrong
- Automatic scheduling based on user performance
POST /auth/login
: Local loginGET /auth/google
: Google OAuth loginGET /auth/github
: GitHub OAuth loginPOST /auth/logout
: Logout
GET /api/flashcards
: Get all flashcardsGET /api/flashcards?category={category}
: Get flashcards by categoryPOST /api/flashcards/{id}/review
: Submit flashcard review
- Install dependencies:
npm install
- Start the development server:
npm run dev
- Access the application at http://0.0.0.0:5000
Required environment variables:
GOOGLE_CLIENT_ID
: Google OAuth client IDGOOGLE_CLIENT_SECRET
: Google OAuth client secretGITHUB_CLIENT_ID
: GitHub OAuth client IDGITHUB_CLIENT_SECRET
: GitHub OAuth client secretSESSION_SECRET
: Session encryption secret