{"id":51292147,"url":"https://github.com/kudzaiprichard/anvil","last_synced_at":"2026-06-30T11:01:29.125Z","repository":{"id":363702772,"uuid":"1264548412","full_name":"kudzaiprichard/anvil","owner":"kudzaiprichard","description":"Offline-first desktop app for coding-interview \u0026 DSA practice — original problems you run and test locally. Built with Tauri, Next.js \u0026 Rust.","archived":false,"fork":false,"pushed_at":"2026-06-10T01:56:23.000Z","size":1432,"stargazers_count":0,"open_issues_count":5,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-06-10T03:13:45.277Z","etag":null,"topics":["algorithms","coding-interview","cross-platform","desktop-app","dsa","education","interview-preparation","leetcode","nextjs","offline-first","react","rust","shadcn-ui","tailwindcss","tauri","typescript"],"latest_commit_sha":null,"homepage":null,"language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/kudzaiprichard.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":"SECURITY.md","support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":"AGENTS.md","dco":null,"cla":null}},"created_at":"2026-06-10T01:30:35.000Z","updated_at":"2026-06-10T01:56:27.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/kudzaiprichard/anvil","commit_stats":null,"previous_names":["kudzaiprichard/anvil"],"tags_count":null,"template":false,"template_full_name":null,"purl":"pkg:github/kudzaiprichard/anvil","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kudzaiprichard%2Fanvil","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kudzaiprichard%2Fanvil/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kudzaiprichard%2Fanvil/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kudzaiprichard%2Fanvil/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/kudzaiprichard","download_url":"https://codeload.github.com/kudzaiprichard/anvil/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kudzaiprichard%2Fanvil/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":34963642,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-06-30T02:00:05.919Z","response_time":92,"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":["algorithms","coding-interview","cross-platform","desktop-app","dsa","education","interview-preparation","leetcode","nextjs","offline-first","react","rust","shadcn-ui","tailwindcss","tauri","typescript"],"created_at":"2026-06-30T11:01:26.654Z","updated_at":"2026-06-30T11:01:29.120Z","avatar_url":"https://github.com/kudzaiprichard.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003cdiv align=\"center\"\u003e\n\n\u003cimg src=\"./.github/assets/banner.png\" alt=\"Anvil — offline-first DSA practice\" width=\"820\" /\u003e\n\n[![CI](https://github.com/kudzaiprichard/anvil/actions/workflows/ci.yml/badge.svg)](https://github.com/kudzaiprichard/anvil/actions/workflows/ci.yml)\n[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](./LICENSE)\n[![Built with Tauri](https://img.shields.io/badge/Tauri-2-24C8DB?logo=tauri\u0026logoColor=white)](https://tauri.app)\n[![Next.js](https://img.shields.io/badge/Next.js-16-black?logo=next.js)](https://nextjs.org)\n[![PRs welcome](https://img.shields.io/badge/PRs-welcome-brightgreen.svg)](./CONTRIBUTING.md)\n\n\u003c/div\u003e\n\n# Anvil\n\n**Offline-first desktop app for coding-interview / DSA practice.** Read a problem, write code in the\napp, and run it against test cases locally — no internet and no account required.\n\nAnvil pairs NeetCode-style, pattern-first learning with local code execution: structured practice\nwith 100% original problems you can run and test on your own machine, plus the ability to author your\nown.\n\n\u003e **Status: early scaffold.** This repository currently contains the desktop shell, the design system,\n\u003e and a theme preview. The problem library, the local code runner, and progress tracking are on the\n\u003e roadmap below — not built yet.\n\n## Preview\n\n\u003e The interface below is the current **design-system preview** (theme + base components). Product\n\u003e screens arrive with the roadmap.\n\n\u003cp align=\"center\"\u003e\n  \u003cimg src=\"./.github/assets/screenshot.png\" alt=\"Anvil theme and component preview (dark mode)\" width=\"900\" /\u003e\n\u003c/p\u003e\n\n## Tech stack\n\n| Layer | Technology |\n|---|---|\n| UI | [Next.js 16](https://nextjs.org) (App Router, static export) · React 19 · TypeScript |\n| Styling | [Tailwind CSS v4](https://tailwindcss.com) · [shadcn/ui](https://ui.shadcn.com) (new-york) |\n| Theme | Custom Slate + Indigo (OKLCH) · light/dark via `next-themes` |\n| Desktop shell | [Tauri 2](https://tauri.app) (Rust) — small, fast, cross-platform |\n\nThe frontend is exported as static assets (`output: 'export'`) and served by Tauri; all native work\n(future: code execution, local SQLite) lives on the Rust side.\n\n## Prerequisites\n\n- **Node.js** 20+ and npm\n- **Rust** (stable) + Cargo — required for the desktop shell ([install](https://www.rust-lang.org/tools/install))\n- **Platform webview deps** for Tauri ([prerequisites](https://tauri.app/start/prerequisites/)):\n  - Windows: WebView2 (preinstalled on Windows 11)\n  - macOS: Xcode Command Line Tools\n  - Linux: `webkit2gtk` and related packages\n\n## Getting started\n\n```bash\nnpm install\n\n# Web preview in the browser (theme + components) at http://localhost:3000\nnpm run dev\n\n# Run the desktop app (starts the dev server, opens the Tauri window)\nnpm run tauri dev\n```\n\n### Building\n\n```bash\n# Static export of the frontend -\u003e ./out\nnpm run build\n\n# Desktop installers (.exe / .dmg / .AppImage, per platform) -\u003e src-tauri/target/release/bundle\nnpm run tauri build\n\n# Or just the app binary, no installers\nnpm run tauri build -- --no-bundle\n```\n\n## Project structure\n\n```\napp/                 Next.js App Router — layout, page (theme preview), globals.css (theme tokens)\nsrc/\n  components/\n    shadcn/          generated shadcn/ui components (button, card, badge, input, …)\n    providers.tsx    next-themes provider (class-based dark mode)\n  lib/\n    utils.ts         cn() class-merge helper\nsrc-tauri/           Tauri 2 desktop shell (Rust)\n  src/               app entry (lib.rs, main.rs)\n  tauri.conf.json    app + window configuration\ncomponents.json      shadcn/ui configuration\nnext.config.ts       Next config (static export for Tauri)\n```\n\nshadcn components are generated into `src/components/shadcn` (configured in `components.json`); add\nmore with `npx shadcn@latest add \u003ccomponent\u003e`.\n\n## Roadmap\n\n- [x] Desktop shell (Tauri) over the Next.js static export\n- [x] Design system — shadcn/ui + custom Slate + Indigo theme\n- [ ] Problem library — original, pattern-organized problems (Markdown + JSON)\n- [ ] Local code runner — run/test Python \u0026 JavaScript with timeouts and sandboxing (Rust)\n- [ ] Progress tracking — solved/attempted, streaks (local SQLite, no account)\n- [ ] Practice modes — Study / Interview / Review\n- [ ] User-authored problems — create, validate, import/export\n\n## Contributing\n\nContributions are welcome — code, original problems, docs, and more. See\n[CONTRIBUTING.md](./CONTRIBUTING.md) and our [Code of Conduct](./CODE_OF_CONDUCT.md). For security\nissues, see [SECURITY.md](./SECURITY.md).\n\n## License\n\n[MIT](./LICENSE) © Kudzai P Matizirofa\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fkudzaiprichard%2Fanvil","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fkudzaiprichard%2Fanvil","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fkudzaiprichard%2Fanvil/lists"}