{"id":24161809,"url":"https://github.com/snacksncode/cram","last_synced_at":"2026-05-24T08:03:54.592Z","repository":{"id":65850815,"uuid":"408754126","full_name":"snacksncode/snc-cards","owner":"snacksncode","description":"Flash-Card app written in NextJS to help me \u0026 my mates to study vocabulary for tests","archived":false,"fork":false,"pushed_at":"2023-02-13T23:21:07.000Z","size":442,"stargazers_count":4,"open_issues_count":0,"forks_count":2,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-04-03T03:32:50.309Z","etag":null,"topics":["learning","nextjs","react"],"latest_commit_sha":null,"homepage":"https://snc-cards.vercel.app","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/snacksncode.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2021-09-21T09:08:42.000Z","updated_at":"2023-12-19T17:19:05.000Z","dependencies_parsed_at":null,"dependency_job_id":"f1222ae2-b55d-4acf-a25a-247553565355","html_url":"https://github.com/snacksncode/snc-cards","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/snacksncode/snc-cards","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/snacksncode%2Fsnc-cards","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/snacksncode%2Fsnc-cards/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/snacksncode%2Fsnc-cards/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/snacksncode%2Fsnc-cards/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/snacksncode","download_url":"https://codeload.github.com/snacksncode/snc-cards/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/snacksncode%2Fsnc-cards/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":276064220,"owners_count":25578997,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-09-20T02:00:10.207Z","response_time":63,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["learning","nextjs","react"],"created_at":"2025-01-12T17:45:43.313Z","updated_at":"2026-05-24T08:03:54.574Z","avatar_url":"https://github.com/snacksncode.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003cp align=\"center\"\u003e\n  \u003cimg src=\"app/icon.svg\" width=\"64\" height=\"64\" alt=\"Cram logo\" /\u003e\n\u003c/p\u003e\n\n\u003ch1 align=\"center\"\u003eCram: Study Cards\u003c/h1\u003e\n\n\u003cp align=\"center\"\u003e\n  A flashcard app for drilling vocabulary. Polish to English, Polish to German, geography.\n  \u003cbr /\u003e\n  Whatever you throw into the data file.\n  \u003cbr /\u003e\n  \u003ca href=\"https://snc-cards.vercel.app\"\u003esnc-cards.vercel.app\u003c/a\u003e\n\u003c/p\u003e\n\n---\n\n## What is this\n\nI built this to help myself study vocabulary. You see a word, try to recall the translation, flip the card, and mark if you got it right. There's also a spelling mode where you type the answer letter by letter.\n\nEverything runs in the browser. No accounts, no backend, no tracking. Your progress is saved locally in IndexedDB so you can pick up where you left off.\n\n## Features\n\n- **Flashcards** - flip cards with keyboard or tap. Mark correct/wrong. Tracks your streak\n- **Spelling mode** - type the answer character by character. Forces you to actually know it\n- **List view** - browse all Q\u0026A pairs in a topic at once\n- **Topic creator** - built-in JSON generator so anyone can create new topic data without touching code\n- **Score history** - charts showing how you've done over time, stored locally\n- **Session resume** - close the tab mid-session, come back later, pick up where you stopped\n- **Fuzzy search** - `Cmd+K` / `Ctrl+K` to quickly jump between topics\n- **Keyboard-first** - Enter to flip, Enter/Backspace for correct/wrong, Ctrl+Z to undo\n- **Interactive tutorial** - a \"How It Works\" section on the home page with playable demo cards\n\n## Running locally\n\nYou need [Bun](https://bun.sh) installed.\n\n```bash\nbun install\nbun run dev\n```\n\nOpens at [localhost:3000](http://localhost:3000).\n\nFor a production build:\n\n```bash\nbun run build\nbun run start\n```\n\n## Adding your own topics\n\nAll the data lives in `data/topics.json`. The format is straightforward:\n\n```json\n{\n  \"id\": \"1\",\n  \"title\": \"Common Greetings\",\n  \"slug\": \"common-greetings\",\n  \"class\": \"en\",\n  \"questions\": [\n    { \"id\": 1, \"question\": \"Dzień dobry\", \"answer\": \"Good morning\" },\n    { \"id\": 2, \"question\": \"Do widzenia\", \"answer\": \"Goodbye\" }\n  ]\n}\n```\n\nThe `class` field controls the color theme: `en` for English (blue), `de` for German (peach/orange), `geo` for geography (green).\n\nYou can also use the built-in topic creator (the + card on the home page) to generate this JSON without writing it by hand.\n\n## Tech stack\n\n- **Next.js 16** with App Router and React Server Components\n- **React 19** + TypeScript\n- **Tailwind CSS v4**\n- **motion/react** for animations (card flips, page transitions, spring physics)\n- **Dexie** for IndexedDB storage (sessions, score history)\n- **Recharts** for score history charts\n- **uFuzzy** for typo-tolerant fuzzy search\n- **Shiki** for syntax-highlighted JSON output\n- **Bun** as the package manager and runtime\n\nDeployed on **Vercel**.\n\n## License\n\nMIT\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsnacksncode%2Fcram","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fsnacksncode%2Fcram","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsnacksncode%2Fcram/lists"}