This is a submission for the Built with Google Gemini: Writing Challenge
Every great project starts with a spark, and every great builder knows that the learning doesn't simply end because the deadline hits. Recently, I participated in building FLTK (Freelancer Toolkit)—a dedicated project aimed at solving common headaches for independent workers. Throughout this journey, Google Gemini was my pair programmer, technical sounding board, and rubber duck.
Here is a look back on what we built, what surprised me, and where I'm headed next.
GitHubFLTK
What I Built with Google Gemini
The Overview
I built FLTK (Freelancer Toolkit), a self-hosted, offline-first web application built with Flask. It acts as a centralized dashboard that brings together every tool a freelancer needs in one place.
The Problem It Solves
Freelancers often juggle half a dozen apps: one app for time tracking, a spreadsheet for expenses, another service for invoicing, and a custom formula for predicting whether they can actually meet an upcoming deadline without burning out. Existing all-in-one SaaS products are often expensive and lock your data into their ecosystem. FLTK solves this by offering a free, open-source, offline-first alternative where data is stored in simple local JSON flat files. It features:
- Deadline Predictor (DRP): Uses estimated hours, daily workload, and working days to predict if a deadline is feasible.
- Invoicing & PDF Generation: Built-in tool to generate and download professional invoices.
- Client & Expense Tracking: Dedicated CRM views, tax estimators, and profitability reports.
The Role of AI
Google Gemini played a massive role in accelerating the development. I used it for:
- Architecture & Scoping: Deciding on a modular Flask architecture (breaking logic into
drp/andwft/modules). - Logic Implementation: Gemini helped write the mathematical logic for the Deadline Predictor and the PDF generation using
xhtml2pdf. - UI/UX: Generating clean Vanilla JS and CSS custom properties to keep the tech stack lightweight and independent of heavy frontend frameworks.
- Testing: Scaffolding the unit tests with
pytestto ensure the predictor module handled edge cases (like zero working hours) correctly.
(Note: FLTK is designed as a local, self-hosted offline tool, so it isn't deployed on Cloud Run—it runs perfectly right on your local machine!)
What I Learned
Technical Skills
- Simplifying the Stack: In a world obsessed with React and complex databases, I learned the power of going back to basics. Flask, Jinja2, Vanilla JS, and flat JSON files are incredibly fast to build with and incredibly easy to maintain.
- PDF Generation from HTML: I got hands-on experience using
xhtml2pdfin Python, learning how to pass Jinja templates into a PDF buffer and deliver it directly to the user as a downloadable file.
Soft Skills & Unexpected Lessons
- Scope Creep is Real: We originally just wanted to build a deadline predictor. Then came the invoices. Then came the tax estimator. Having Gemini around made it so easy to add features that I had to actively practice restraint to actually finish the core app.
- The Offline-First Mindset: Building for a local-first environment completely changed how I thought about data persistence, backups, and user privacy.
My Google Gemini Feedback
Working with Gemini was a highly productive experience, but it wasn't without its friction points. Let's be candid about the good, the bad, and the ugly.
The Good
- Incredible Context Window: Gemini's ability to hold the entire context of my project's file structure and previous feature requests is unmatched. I could say, "Update the global search in
base.htmlto include the new expense tracker data format," and it knew exactly where to look and what to change. - Rapid Prototyping: Scaffolding boilerplate code, especially the Flask module routes and Jinja template inheritance, took seconds instead of hours.
The Bad
- Over-complicating Simple Tasks: Occasionally, when I asked for a simple way to store data, Gemini would immediately suggest setting up SQLAlchemy and a PostgreSQL database. I had to continually remind it that we were sticking to a completely offline, flat JSON file architecture.
The Ugly
- UI Hallucinations: When generating CSS grids or Flexbox layouts, there were moments where Gemini provided code that technically worked but created visual overlapping bugs on smaller screens. I had to manually step in and tweak the CSS custom properties to ensure full responsiveness.
Where I'm Headed Next
The learning doesn't stop here. Moving forward, I want to implement data visualization in FLTK using a lightweight JS charting library (like Chart.js) to make the profitability reports more visual. I also plan to add a more robust backup syncing mechanism (perhaps optional Google Drive integration) for users who want cloud peace of mind while retaining local ownership.
Building FLTK with Google Gemini was a fantastic experience that fundamentally changed how fast I can take an idea from a spark to a fully functional application.
Happy hacking! 🚀
Top comments (2)
github.com/Srijan-XI/FLTK
Interesting