https://github.com/kudzaiprichard/anvil
Offline-first desktop app for coding-interview & DSA practice — original problems you run and test locally. Built with Tauri, Next.js & Rust.
https://github.com/kudzaiprichard/anvil
algorithms coding-interview cross-platform desktop-app dsa education interview-preparation leetcode nextjs offline-first react rust shadcn-ui tailwindcss tauri typescript
Last synced: about 10 hours ago
JSON representation
Offline-first desktop app for coding-interview & DSA practice — original problems you run and test locally. Built with Tauri, Next.js & Rust.
- Host: GitHub
- URL: https://github.com/kudzaiprichard/anvil
- Owner: kudzaiprichard
- License: mit
- Created: 2026-06-10T01:30:35.000Z (21 days ago)
- Default Branch: main
- Last Pushed: 2026-06-10T01:56:23.000Z (21 days ago)
- Last Synced: 2026-06-10T03:13:45.277Z (21 days ago)
- Topics: algorithms, coding-interview, cross-platform, desktop-app, dsa, education, interview-preparation, leetcode, nextjs, offline-first, react, rust, shadcn-ui, tailwindcss, tauri, typescript
- Language: TypeScript
- Size: 1.37 MB
- Stars: 0
- Watchers: 0
- Forks: 0
- Open Issues: 5
-
Metadata Files:
- Readme: README.md
- Contributing: CONTRIBUTING.md
- License: LICENSE
- Code of conduct: CODE_OF_CONDUCT.md
- Security: SECURITY.md
- Agents: AGENTS.md
Awesome Lists containing this project
README

[](https://github.com/kudzaiprichard/anvil/actions/workflows/ci.yml)
[](./LICENSE)
[](https://tauri.app)
[](https://nextjs.org)
[](./CONTRIBUTING.md)
# Anvil
**Offline-first desktop app for coding-interview / DSA practice.** Read a problem, write code in the
app, and run it against test cases locally — no internet and no account required.
Anvil pairs NeetCode-style, pattern-first learning with local code execution: structured practice
with 100% original problems you can run and test on your own machine, plus the ability to author your
own.
> **Status: early scaffold.** This repository currently contains the desktop shell, the design system,
> and a theme preview. The problem library, the local code runner, and progress tracking are on the
> roadmap below — not built yet.
## Preview
> The interface below is the current **design-system preview** (theme + base components). Product
> screens arrive with the roadmap.
## Tech stack
| Layer | Technology |
|---|---|
| UI | [Next.js 16](https://nextjs.org) (App Router, static export) · React 19 · TypeScript |
| Styling | [Tailwind CSS v4](https://tailwindcss.com) · [shadcn/ui](https://ui.shadcn.com) (new-york) |
| Theme | Custom Slate + Indigo (OKLCH) · light/dark via `next-themes` |
| Desktop shell | [Tauri 2](https://tauri.app) (Rust) — small, fast, cross-platform |
The frontend is exported as static assets (`output: 'export'`) and served by Tauri; all native work
(future: code execution, local SQLite) lives on the Rust side.
## Prerequisites
- **Node.js** 20+ and npm
- **Rust** (stable) + Cargo — required for the desktop shell ([install](https://www.rust-lang.org/tools/install))
- **Platform webview deps** for Tauri ([prerequisites](https://tauri.app/start/prerequisites/)):
- Windows: WebView2 (preinstalled on Windows 11)
- macOS: Xcode Command Line Tools
- Linux: `webkit2gtk` and related packages
## Getting started
```bash
npm install
# Web preview in the browser (theme + components) at http://localhost:3000
npm run dev
# Run the desktop app (starts the dev server, opens the Tauri window)
npm run tauri dev
```
### Building
```bash
# Static export of the frontend -> ./out
npm run build
# Desktop installers (.exe / .dmg / .AppImage, per platform) -> src-tauri/target/release/bundle
npm run tauri build
# Or just the app binary, no installers
npm run tauri build -- --no-bundle
```
## Project structure
```
app/ Next.js App Router — layout, page (theme preview), globals.css (theme tokens)
src/
components/
shadcn/ generated shadcn/ui components (button, card, badge, input, …)
providers.tsx next-themes provider (class-based dark mode)
lib/
utils.ts cn() class-merge helper
src-tauri/ Tauri 2 desktop shell (Rust)
src/ app entry (lib.rs, main.rs)
tauri.conf.json app + window configuration
components.json shadcn/ui configuration
next.config.ts Next config (static export for Tauri)
```
shadcn components are generated into `src/components/shadcn` (configured in `components.json`); add
more with `npx shadcn@latest add `.
## Roadmap
- [x] Desktop shell (Tauri) over the Next.js static export
- [x] Design system — shadcn/ui + custom Slate + Indigo theme
- [ ] Problem library — original, pattern-organized problems (Markdown + JSON)
- [ ] Local code runner — run/test Python & JavaScript with timeouts and sandboxing (Rust)
- [ ] Progress tracking — solved/attempted, streaks (local SQLite, no account)
- [ ] Practice modes — Study / Interview / Review
- [ ] User-authored problems — create, validate, import/export
## Contributing
Contributions are welcome — code, original problems, docs, and more. See
[CONTRIBUTING.md](./CONTRIBUTING.md) and our [Code of Conduct](./CODE_OF_CONDUCT.md). For security
issues, see [SECURITY.md](./SECURITY.md).
## License
[MIT](./LICENSE) © Kudzai P Matizirofa