Dev.to AI 🤖 Ai 👁 0 📖 2 min read

Basalt — Turn Messy Client Notes into Invoices .

This is a submission for the Hacktoberfest Open-Source AI Challenge Week 2: Side Hustle What I Built Basalt is a web app for freelancers who hate rewriting the same client paperwork. You pick a command — Inv

Basalt — Turn Messy Client Notes into Invoices .

This is a submission for the Hacktoberfest Open-Source AI Challenge Week 2: Side Hustle

What I Built

Basalt is a web app for freelancers who hate rewriting the same client paperwork.

You pick a command — Invoice, Proposal, Follow-up, or Scope — paste messy notes, and Basalt turns them into copy you can send. It feels like a command bar, not another endless chat window.

Who would pay for it? Independent freelancers and small studios. If you bill every week, saving 20–30 minutes per invoice or proposal is worth a few dollars a month. Small and specific on purpose: one job, four commands, ready-to-send text.

Links

Demo

Landing

Basalt landing

Workspace — Invoice

Invoice workspace

Workspace — Proposal

Proposal workspace

Workspace — Follow-up & Scope

Follow-up

Scope

Code

GitHub logo nonsense3 / Basalt

Freelancer command bar powered by open-weight Gemma 4. Basalt turns messy client notes into invoices, proposals, follow-ups, and scoped briefs — in one command. Built for the

Basalt

Freelancer command bar powered by open-weight Gemma 4.

Basalt turns messy client notes into invoices, proposals, follow-ups, and scoped briefs — in one command. Built for the Hacktoberfest Open-Source AI Challenge: Week 2 — Side Hustle.

Next.js Gemma 4 Render License: MIT

Why Basalt?

Freelancers rewrite the same invoices, proposals, and chase emails every week. Closed chatbots work until client data, cost, or lock-in gets in the way.

Basalt keeps the workflow in a focused command bar and uses Gemma 4 (Google’s open-weight model) so you can:

  • Swap model size via GEMMA_MODEL without rewriting the product
  • Point the same prompts at a local Gemma later (Ollama / Edge)
  • Keep pricing predictable for a tool someone would actually pay for

Screenshots

Landing

Basalt landing hero

Workspace — Invoice

Invoice workspace

Workspace — Proposal

Proposal workspace

Workspace — Follow-up

Follow-up workspace

Workspace — Scope

Scope workspace

Features

Command What it does
Invoice Line items, totals placeholders, payment terms from rough notes
Proposal Short client proposal: approach, deliverables,
…

Live

How I Built It

  • Model: Google’s open-weight Gemma 4 (gemma-4-26b-a4b-it, with fallback to gemma-4-31b-it) via Google AI Studio and @google/generative-ai. Retries on Google 500s so the workspace stays usable when the API blips.
  • App: Next.js 15 + TypeScript. Interactive landing command bar → /workspace with live generation through /api/generate.
  • Design: Dark cinematic hero with a warm crimson→coral→amber aurora (CSS-only).
  • Hosting: Render Web Service via render.yaml (Node build/start — not a static site).

Partner tech is only what the product needs: Gemma for generation, Render for hosting.

Why Does Open Innovation Matter?

A freelancer side hustle dies if inference costs spike or a closed vendor changes terms overnight.

Because Basalt runs on open-weight Gemma:

  1. Cost control — small open models keep a $5–10/mo product realistic.
  2. No lock-in — swap GEMMA_MODEL, or later point the same prompts at local Gemma so client notes never leave the laptop.
  3. Niche tuning later — fine-tune on a freelancer’s past invoices without restarting on a closed API.

Closed chat is fine for demos. Open weights are what make this a business someone could actually run.

Categories

  • Use of Gemma
  • Use of Render
📰 Read the original article on Dev.to AI

Originally published by Dev.to AI. Aggregated on AIWithGhost for educational purposes — full credit and traffic to the original publisher.