Sticker Brains is a beginner-friendly web app where players solve mini brain teasers to unlock and download meme stickers.
- Sticker gallery
- Puzzle per sticker
- Unlock flow after correct answer
- Sticker download support
- Frontend: React + TypeScript + Vite
- Backend: Node.js + Express
- Database: SQLite (
better-sqlite3) + Drizzle ORM - UI: Tailwind CSS + shadcn/ui
sticker-brains/
├─ apps/
│ ├─ api/ # Backend (Express)
│ │ ├─ db.ts
│ │ ├─ index.ts
│ │ ├─ routes.ts
│ │ ├─ static.ts
│ │ ├─ storage.ts
│ │ └─ vite.ts
│ └─ web/ # Frontend (React + Vite)
│ ├─ index.html
│ ├─ requirements.md
│ ├─ public/
│ │ ├─ favicon.png
│ │ └─ memes/
│ │ ├─ README.md
│ │ └─ ...meme image files
│ └─ src/
│ ├─ App.tsx
│ ├─ main.tsx
│ ├─ index.css
│ ├─ components/
│ │ ├─ GameModal.tsx
│ │ ├─ Header.tsx
│ │ ├─ StickerCard.tsx
│ │ └─ ui/
│ │ ├─ accordion.tsx
│ │ ├─ alert-dialog.tsx
│ │ ├─ alert.tsx
│ │ ├─ aspect-ratio.tsx
│ │ ├─ avatar.tsx
│ │ ├─ badge.tsx
│ │ ├─ breadcrumb.tsx
│ │ ├─ button.tsx
│ │ ├─ calendar.tsx
│ │ ├─ card.tsx
│ │ ├─ carousel.tsx
│ │ ├─ chart.tsx
│ │ ├─ checkbox.tsx
│ │ ├─ collapsible.tsx
│ │ ├─ command.tsx
│ │ ├─ context-menu.tsx
│ │ ├─ dialog.tsx
│ │ ├─ drawer.tsx
│ │ ├─ dropdown-menu.tsx
│ │ ├─ form.tsx
│ │ ├─ hover-card.tsx
│ │ ├─ input-otp.tsx
│ │ ├─ input.tsx
│ │ ├─ label.tsx
│ │ ├─ menubar.tsx
│ │ ├─ navigation-menu.tsx
│ │ ├─ pagination.tsx
│ │ ├─ popover.tsx
│ │ ├─ progress.tsx
│ │ ├─ radio-group.tsx
│ │ ├─ resizable.tsx
│ │ ├─ scroll-area.tsx
│ │ ├─ select.tsx
│ │ ├─ separator.tsx
│ │ ├─ sheet.tsx
│ │ ├─ sidebar.tsx
│ │ ├─ skeleton.tsx
│ │ ├─ slider.tsx
│ │ ├─ switch.tsx
│ │ ├─ table.tsx
│ │ ├─ tabs.tsx
│ │ ├─ textarea.tsx
│ │ ├─ toast.tsx
│ │ ├─ toaster.tsx
│ │ ├─ toggle-group.tsx
│ │ ├─ toggle.tsx
│ │ └─ tooltip.tsx
│ ├─ hooks/
│ │ ├─ use-games.ts
│ │ ├─ use-mobile.tsx
│ │ ├─ use-stickers.ts
│ │ └─ use-toast.ts
│ ├─ lib/
│ │ ├─ queryClient.ts
│ │ └─ utils.ts
│ └─ pages/
│ ├─ Home.tsx
│ ├─ MyStickers.tsx
│ └─ not-found.tsx
├─ packages/
│ └─ shared/ # Shared API contracts and DB schema types
│ ├─ routes.ts
│ └─ schema.ts
├─ scripts/
│ └─ build.ts
├─ components.json
├─ DEMO_INSTRUCTIONS.md
├─ drizzle.config.ts
├─ package.json
├─ postcss.config.js
├─ tailwind.config.ts
├─ tsconfig.json
└─ vite.config.ts
- Node.js 20+
- npm 10+
npm installnpm run devhttp://localhost:5000
If you want the most reliable command for presentations:
npm run demo:startThis command:
- Frees port
5000if it is already in use - Applies database schema (
db:push) - Starts the app
npm run dev- start local development servernpm run demo:start- prepare + run app (best for demo)npm run demo:ready- free port + apply database schemanpm run check- TypeScript type checknpm run build- production buildnpm run start- run production buildnpm run db:push- apply DB schema changes
npm run dev:cleanThen start again:
npm run devnpm run db:pushThen run:
npm run devContributions are welcome.
- Fork the repository
- Create a branch (
feature/your-change) - Make your changes
- Run checks (
npm run check) - Open a Pull Request
- Put frontend code in
apps/web - Put backend code in
apps/api - Put shared contracts in
packages/shared - Keep changes focused and easy to review
MIT