EngiBoard.
A desktop SaaS for engineers. Shipped in 4 weeks. Capture, annotate, track — one binary.
Zero hires. Public on GitHub.



- What
- A native desktop tracker for engineers’ before/after photo reports, on Mac and Windows.
- Why
- Site reports ran through four glued apps (camera roll → Telegram → Word), and every handoff dropped context.
- My role
- Product, UX/UI and engineering, solo with AI: Tauri 2, Next.js, Supabase.
- Result
- 44 releases tagged · 4 installers · 0 hires
A native tracker for engineers who run before/after photo reports on construction sites and production floors.
Read the full story
Tauri 2 + Next.js + Supabase. macOS and Windows installers. 44 releases tagged. 98 commits. Zero hires. Public on GitHub.
A native desktop tracker for engineers who run before/after photo reports on construction sites and production floors. Built first for the founder himself — then for two real Windows-only clients in production QA.
18 surfaces. One binary.
Login → projects → capture → annotate → track → review → export. No setup pages, no “advanced”.
All 18 surfaces
Every surface designed for one thing the engineer is doing right now. No configuration, no setup pages, no “advanced”.
- 01 · Login
- 02 · Main board
- 03 · Project picker
- 04 · Dashboard
- 05 · Slideshow + pins
- 06 · Annotation editor
- 07 · Compare wipe
- 08 · Dark mode
- 09 · Dark dashboard
- 10 · Dark picker
- 11 · Dark login
- 12 · Out-of-scope modal
- 13 · Empty state
- 14 · Profile
- 15 · Sniper overlay
- 16 · Paste mode
- 17 · Status menu
- 18 · Bulk select
Camera roll → Telegram → Word. Done.
Every site visit leaked context: photos lost in chats, annotations far from the task list.
Capture, mark, attach.
Native screenshot speed, Linear-style tasks.
Four apps glued together.
Every handoff drops context.
One binary.
Pin a comment to a pixel — not a timestamp.
Read the full story
The existing toolchain on every site visit was lossy and slow. Photos disappeared into chats, annotations lived in a different app than the task list, reports lost context the moment they were forwarded.
- 01 · Task — one-purpose desktop. Capture, mark, attach. Native screenshot speed, Linear-style task structure, image-anchored discussions. Engineers stay in one app — not glued across four.
- 02 · Problem — four apps glued with screenshots and prayer. Camera roll → Telegram → spreadsheet → Word → PDF. Every handoff drops context. Annotation tools live somewhere else than the task list.
- 03 · Solution — one binary. Capture, annotate, track. Tauri-native overlay captures any region. Editor with six tools. Tasks grouped per project, eight color-coded statuses. Pin a comment to a pixel — not a timestamp.

“The first tool that does the actual loop I’m doing on site, instead of three half-tools I have to glue together.”
Region. Annotate. Attach.
Cmd+Shift+G from anywhere fires a transparent overlay. Drag, annotate, save into the before/after slot.
Capture
Native macOS / Windows region capture.

Annotate
Six tools, always on top.

Attach
Back to the task, before or after.

Read the full story
Cmd+Shift+G from anywhere fires a transparent fullscreen overlay. Drag a rectangle. Native macOS / Windows capture. Editor opens with the PNG ready, six tools live — arrow, rect, pen, text, blur, highlight. Save returns the annotated image to your selected before/after slot.
Where the work lives.
Tasks grouped by project, typed inline — no modal, no double-click, no detour.

- 01Inline task inputPer group, no detour.
- 02Multi-screenshotSeveral images per task.
- 03Rename, re-orderWithout leaving the board.
Read the full story
Sidebar groups tasks by project. Inline task input per group — no modal, no double-click, no detour. Eight statuses, color-coded. Multi-screenshot per task. Rename and re-order without leaving the board.
Pin to a pixel, not a timestamp.
Reviews live on the image. Click a pixel, drop a pin, write — threaded, many reviewers.

Pins pulse orange while unreadThen turn blue with a number.

Drag the lineSee the difference — no toggle.
Read the full story
Reviews live on the image, not in a separate thread. Open a screenshot in the lightbox — click any pixel — drop an orange pin — write a comment. Multiple reviewers, threaded. Compare wipe slider for before/after, drag-to-reveal.
Lightbox · pins — click a pixel, write a comment. Pins pulse orange while unread, turn blue with a number once seen. Right rail lists every comment with author, time, delete. Multiple reviewers, fully threaded.
Compare wipe — drag the line, see the difference. Two screenshots stacked, single drag handle. No flicker, no toggle, no “switch tab” — pure muscle memory. Works on any task with both before and after attached.
Eight statuses. Two views.
Every colour survived ten rejections — none is decoration.


Read the full story
Done, Problem, In Progress, Review, Info Required, Upcoming, Not Relevant, Info — eight statuses, every one earned its colour. Dashboard rolls up totals across projects; status menu lets you change one or many in one click.
Dashboard — rollup, not roll-call. Project counts, status distribution, top blockers. One screen answers: where is the team stuck? No drill-down before you’ve seen the whole field.
Status menu — one click to move anything. Right-click any task, change status. Bulk-select rows, change all of them at once. Eight colours that survived ten rejections — every one has a meaning, none of them are decoration.


Same UX, any platform.
Read the full story
Mac M-series, Mac Intel, Windows EXE, Windows MSI. Shared HTML/CSS/JS frontend, Tauri 2 native shell. Dark mode toggles per surface, not per app. Tester complaints loop back into the next release tag.
Light theme — sunlit on a construction site. Default surface. Higher contrast on photos, easier on real-world lighting. Print preview matches what you see.
Dark theme — office, evening, OBS overlay. Designed for late-night triage and screen-recorded walkthroughs. Same content, deeper canvas, status colours hold their meaning either way.
Geist for product. Mono for system. Sky, amber, deep black.
Geist 400–700 for UI; Geist Mono for timestamps, versions, hotkeys.
Amber lives on one status — “in progress” — because it earned it.

Type and palette in detail
Typography. Geist Sans across the entire app — a clean modern sans tuned for high-density product surfaces. Geist Mono for the parts where the system speaks back: timestamps, file sizes, version tags, hotkey hints.
- Geist · 400 / 500 / 600 / 700 — primary UI. Tight tracking, neutral skeleton. From caption (10px) to display (96px).
- Geist Mono · 400 / 500 — timestamps, version tags, file paths, command-line hints. Anywhere the system is precise.
- Instrument Serif · italic — editorial accent, case study only: hero phrases, pull quotes, slow moments. Not in the app.
Palette. Sky-blue carries the brand and active states. Amber lives on a single status — “in progress” — because it earned it. Deep black grounds the canvas; everything else is system white-on-noise.
- Engineer Sky #0EA5E9 — brand, active states, primary actions, links.
- Sky Light #7DD3FC — hover, focus glow, subtle lift on hero gradients.
- In-Progress Amber #FFC940 — one earned status pill. Used sparingly — never decoration.
- Studio Black #0A0A0C — canvas. Lights down. Every screenshot starts here.
Seven days, thirty-eight tags.
Each tag builds real binaries in CI. A tester complains in the morning, gets the fix after lunch.
Day by day
Hourly cadence: each tag triggers a CI pipeline that produces real shipped binaries — Mac M-series, Mac Intel, Windows EXE, Windows MSI. A tester complains in the morning, gets the fix after lunch.
- Day 1 · Apr 28 — Tauri scaffold. Skeleton, GitHub Actions pipeline. Native screencapture pivots before noon. v0.1.1 → v0.1.9.
- Day 2 · Apr 29 — Sniper overlay. Custom transparent fullscreen, drag-region capture. Native quality, our control. v0.1.10.
- Day 3 · Apr 30 — Annotation editor. Six tools — arrow, rect, pen, text, blur, highlight. Always-on-top, no focus pull. v0.1.11 → v0.1.12.
- Days 4–5 · May 1–2 — Founder dogfood. Two days of real site walks. Specific complaints filed, not vague. Field test.
- Day 6 · May 3 — Sprint day. Twelve versions in 24h. Inline tasks, multi-screenshot, PDF export, dark mode, RU/EN, lightbox pins. v0.1.13 → v0.1.24.
- Day 7 · May 4 — Final sprint. Fourteen versions. Project picker, inline chat, compare wipe, OAuth retry, Windows clients on. v0.1.25 → v0.1.44.
- Public — Live. Mac DMG · Mac Intel · Win EXE · Win MSI. All public on GitHub Releases. 44 releases.
How it was made.
Blank repo to v0.1.44 in production. Solo founder + AI co-workers.
- TTauri 2 / RustNative shell, deep-link, plugins
- NNext.js · ReactWeb mirror, OAuth landing
- SSupabaseAuth, Google OAuth, DB
- ★Claude CodePrimary AI builder
- GGitHub Actions · Railway4-platform CI, web auto-deploy
Timeline and full stack
Six days, seven hours from blank repo to v0.1.44 in production. Solo founder + AI co-workers. Every release public on GitHub.
- Day 1 — Tauri scaffold + CI · Apr 28
- Day 2 — Sniper overlay · Apr 29
- Day 3 — Annotation editor · Apr 30
- Days 4–5 — Founder dogfood · May 1–2
- Day 6 — Sprint (12 versions) · May 3
- Day 7 — Final sprint (14 versions) · May 4
- Tauri 2 / Rust — native shell, deep-link, plugins
- Next.js · React — web mirror, OAuth landing
- Supabase — auth, Google OAuth, DB
- Claude Code — primary AI builder
- GitHub Actions — 4-platform CI, every tag
- Railway — web auto-deploy on push
- Figma — architecture sketches only
- Geist · Mono — type system
From blank repo to v0.1.44 — in 4 weeks.
One of seven projects shipped by Stepikin Studio in 2025–26 — built to test the studio thesis at the limit. The thesis held.


















