DEV Community

Florin Sarca
Florin Sarca

Posted on

Construct Note: A Local-First, Privacy-Focused Kanban Desktop App

This is a submission for the Built with Google Gemini: Writing Challenge

What I Built with Google Gemini

I built Construct Note, a fast, local-first Kanban and task management desktop application.

Construct Note Demo

Many modern productivity apps rely heavily on cloud syncing and subscriptions, which can be a privacy concern for users who want complete control over their own data. I wanted to build a Trello-like application that lives entirely on the user's machine, offering the same rich drag-and-drop experience without the data leaving the local file system.

The Tech Stack:

  • Frontend: React, Vite, Tailwind/Vanilla CSS, and @hello-pangea/dnd for fluid drag-and-drop mechanics.
  • Backend / Desktop wrapper: Electron, Express (running locally inside the Electron main process), and better-sqlite3 for high-performance, synchronous database operations.
  • Distribution: Packaged as a standalone Linux AppImage.

Key Features:

  • Unlimited Boards, Lists, and Cards.
  • Full Markdown support for card descriptions (react-markdown).
  • Checklists, Card Notes, and the ability to link/relate cards to one another.
  • Card templates for standardizing repetitive task creation.
  • Offline-by-default architecture: Everything is saved to a local SQLite database (constructnote.db) operating in WAL (Write-Ahead Log) mode for speed.

Adding a card

What role did Google Gemini play?
I used Google Gemini as my AI pair-programmer throughout the majority of the development lifecycle. Gemini helped me:

  1. Architect the Application: I am very bad at planning, which is why I wanted my own little planning helper. Gemini helped me stay in scope and stick to a plan. I put my ideas into simple words and after a few prompts I was able to have a good folder structure to go by and an idea of the general layout with some good suggestions for imports.
  2. Database Design & Migrations: Gemini wrote the SQLite schema and helped incrementally add new features (like milestones and accent colors).
  3. Complex UI Interactions: It assisted in wiring up the React drag-and-drop logic for reordering both lists and cards, ensuring optimistic UI updates matched the backend database state when I encountered some bugs.
  4. Packaging and Compilation: When I ran into native Node module compilation errors trying to bundle better-sqlite3 for Linux, Gemini helped debug the build process and correctly configure the asarUnpack bindings.

Drag and drop demo

What I Learned

  • Native Node Modules: I gained a better understanding of how native C++ Node modules behave when packaged into an .asar archive, and how to configure electron-builder to correctly rebuild them for specific target platforms.
  • AI Pair Programming: Developing with Gemini changed how I approach roadblocks. Instead of spending hours scouring StackOverflow for edge cases (like React state mismatches during fast drag-and-drop reordering), I could bounce ideas off Gemini and implement robust solutions in minutes.

Google Gemini Feedback

What worked well?
Gemini was surprisingly good at holding context of my project. I did not have to repeat myself too many times and I was able to actually progress much quicker in certain areas by having something to bounce ideas off rather than spending hours reading documentation and trying to figure out edge cases.

Top comments (0)