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 VishKron-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.
GitHubVishKron | FLTK
What I Built with Google Gemini
The Overview
I built VishKron-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 VishKron-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