Felipe Afonso Field NotesIssue 01

Software Engineer · Full-Stack · End-to-End Ownership

Hand me a problem. I'll hand back a working product.

I work like an embedded product team of one: I take a problem from rough idea to a running product — design, build, deploy — with minimal hand-offs in between.

Operating Model

I tend to take a problem end-to-end — design, build, deploy, and the parts no one volunteers for: auth, billing, the deploy pipeline — so it lands as one decision instead of a chain of hand-offs.

I'm comfortable across the stack and across languages, so I can usually reach for the tool a problem wants rather than the one I happen to know. I lean on AI as a multiplier on delivery speed — it's a big part of why the two products below, each with auth, billing, real-time, AI extraction, and its own marketing site, shipped from one pair of hands. I've also led a small team, so I'm comfortable coordinating when a problem is bigger than one person.

Tier One / Two Products, One Builder

:wq— writequit.dev

Tier One / Developer Tool, Shipped Solo

writequit.dev

Freelance developers juggle tasks, time, and invoices across three disconnected tools — and lose the thread.

  • A full commercial SaaS — task manager, time tracker, invoice generator — in one terminal-native tool with vim keybindings and markdown tasks.
  • Auth (WorkOS), invoice generation (jsPDF), real-time chat and shared client boards (Convex), password-gated permissioned sharing.
  • The product design, the opinionated UX, and the marketing voice — not just the code.
  • SvelteKit 5 · Convex · Tailwind 4 · deployed on Vercel.
:wq
writequit task board: markdown tasks, a running timer, and status filters in one terminal-style view
The board freelancers live in: markdown tasks, running timer, status filters. “manage work, not a workspace.”
:wq
writequit time-tracking sessions with a live running timer
Time tracking with live running timers — part of the same tool, not a second app. “tasks. time. invoices.”
:wq
writequit invoices generated as PDFs
jsPDF invoice generation — billing built into the same tool, not bolted on.
:wq
writequit shared client board management with a share URL, password, and a live chat panel
Password-protected client boards with live chat (Convex) — permissioned sharing, real-time.
:wq
the public client view of a writequit shared board, unlocked, with live chat
What the client sees: a password-unlocked board with live chat — the sharing surface, from the other side.
REC00:48:21:stop

A complete, billable product — auth to invoice to live client collaboration — shipped end-to-end by one builder.[Felipe: add metric — e.g., paying customers / time-to-first-invoice]

a tool, not a lifestyle · write. quit. ship. · for developers who'd rather ship than organize

Tier One / Consumer Product, Shipped Solo

pondera.casa

Choose the right house — without getting lost along the way.

Choosing a property means drowning in tabs and gut feeling. pondera turns a pasted listing URL into a structured decision — real scraping and LLM extraction, not a chat box — then curates, compares, and ranks.

Next.js 16 · React 19 · Convex · OpenRouter (gpt-4o-mini)

  1. Paste

    pondera.casa
    pondera property detail: AI-extracted price, area and neighborhood with a pros, cons and watch-outs card
    Paste a link; AI extracts price, area, photos and a pros / cons / watch-outs card. No data entry.
  2. Score

    pondera.casa
    pondera gallery with per-property ratings, favorites and portfolio stats
    Score each property on a checklist; portfolio stats update as you go.
  3. Compare

    pondera.casa
    pondera side-by-side comparison table with the best value per criterion highlighted in gold
    A side-by-side table with best value per criterion highlighted in gold.
  4. Decide

    pondera.casa
    pondera AI recommendation ranking that explains each position in plain language
    AI ranks the options and explains each position in plain language. You decide.

Real AI work — scraping, extraction, curation, ranking — wrapped in a polished consumer product and its marketing site, shipped end-to-end.[Felipe: add metric — e.g., listings processed / decisions made]

Tier Two / Internal Product, Shipped Solo

Venture Lab — Niterra Group

A growing venture team ran on a CRM that couldn't carry portfolio reporting, expenses, or contracts. I built a custom automation layer on Affinity CRM, then scaled it into a full internal portal serving multiple business functions — a Portfolio Management module (automated quarterly report ingestion, real-time dashboards, custom reporting) and an Expense & Contract Management solution.

System map

Affinity CRM feeds an automation layer, which feeds an internal portal containing a Portfolio Management module and an Expense and Contract Management module.

“One internal portal carried reporting, expenses, and contracts across multiple business functions — an automation layer built on Affinity CRM.”

Replaced manual quarterly report handling with automated ingestion and live dashboards.
[Felipe: add metric — hours saved per reporting cycle / # portfolio companies tracked]

Venture Lab, Niterra GroupVenture Lab · Niterra Group
Niterra Ventures portfolio dashboard — total invested, estimated exit value and average TVPI above a quarterly revenue trend and a recent-movers list
Portfolio dashboard — total invested, estimated exit value and TVPI up top; a quarterly revenue trend, recent movers and a projected exit timeline below.

Portfolio Management

Niterra per-company financial detail with revenue and net-income charts versus plan
Per-company financials — revenue and net income vs plan, liquidity ratios, quarter and YTD variance.
Niterra exit-valuation model showing enterprise value and MOIC across low, mid and high scenarios
Exit modeling — enterprise value and MOIC across low / mid / high scenarios, with a liquidation-preference waterfall and comps.
Niterra deal funnel tracking conversion across the investment pipeline stages
Deal funnel — conversion from intake to investment across the pipeline, with drop and long-term-follow lanes.

Expense & Contract

Niterra expenditure tracking dashboard with spend versus budget broken down by domain
Expenditure tracking — spend vs budget by domain, paid / forecasted split, multi-currency totals.
Niterra forecast-accuracy report comparing forecasted and actual spend per engagement
Forecast accuracy — forecasted vs actual spend per engagement, scored by variance.

Screens from a public demo seeded with fictional data — no real portfolio data shown.

Tier Two / Precision-Ag Platform · Web + Mobile

Flora — Santos Lab

Agronomists needed drone, satellite, and field data fused into something they could read on a map — and capture offline in the field. I built the React/TypeScript platform (Leaflet + Turf.js) and an offline-first React Native field app, and grew from developer into Tech Lead of five.

app.flora
Flora interactive map fusing drone, satellite and field data with geospatial analysis
Drone, satellite and field data on one interactive map (Leaflet + Turf.js geospatial analysis).
Flora offline-first React Native field-collection app showing a selected farm
Offline-first React Native field app — the same platform, collected where there's no signal.
app.flora
Flora analytics dashboard with custom charts turning geospatial data into decisions
Analytics dashboards and custom charts turning raw geospatial data into decisions.
app.flora
Flora filtered map with analysis layers
Filtered map + analysis layers — [Felipe: add scale metric, e.g. farms/hectares monitored].

A web + mobile platform that put multi-source geospatial data in one place — and the case where I went from building to leading the build, developer to Tech Lead of 5.

Tier Two / Systems Behind the Screens

The systems users never see

HomeOptions' real engine was internal. For a call-center sales operation I owned a custom SvelteKit CRM wired into Twilio's call center, an AI-assisted call-handoff tool, and a Go/HTMX compliance & debt-settlement platform — the systems that don't screenshot well but run the business.

HomeOptions internal

A custom SvelteKit CRM integrates with the Twilio call center, an AI-assisted call-handoff tool, and a Go and HTMX compliance and debt-settlement platform.

“Three internal systems for a call-center operation — CRM, AI call-handoff, and a compliance/debt-settlement platform — owned end-to-end.”

[Felipe: add metric — calls handled / agent handoff time / compliance cases processed]

Public-facing work

homeoptions.com
HomeOptions public user portal rebuilt on Next.js server-side rendering
HomeOptions portal: rebuilt React SPA → Next.js SSR for performance and SEO. [Felipe: add load-time before/after or SEO lift]
homeoptions.com/blog
HomeOptions blog and content surface built on server-side rendering
Content/blog on the same SSR foundation — SEO-driven entry points feeding the funnel.
liftup
Liftup public portal and ad-campaign landing page
Liftup portals & ad-campaign landing pages — fast, conversion-focused entry points. [Felipe: add conversion metric]

Back Matter / Built for the Love of It

When the work's done, I still build. A sampling of things made for the love of it — small games, starter templates, sprites and code, all mine.

Stupid Spider game title screen, built in Rust with the Bevy engine
Stupid Spider — a game built ground-up in Rust + Bevy: sprites, original music, and code, all mine.
Stupid Spider gameplay screenshot
Go + HTMX starter template
Go + HTMX starter template — shared for other builders.
Sudokouija title screen — pixel-art sun and moon framing the menu, built in LÖVE for Scream Jam 2025
Sudokouija — a horror sudoku built in LÖVE for Scream Jam 2025: solve the board before the timer runs out. Sprites and code by hand, no generative AI.
Sudokouija gameplay — a sepia pixel-art sudoku board with a countdown timer and a number pad
HTMX starter template for the Gleam functional language
HTMX starter for the Gleam functional language — range across stacks.
~9 yrs shipping softwarefull-stack across many stacksM.Sc. CS — cross-platform dev researchformer Tech Lead of 5solo delivery, end-to-end

Have a problem that needs an owner, not a committee?

Send me the messy version — I'll come back with where I'd start.

Felipe Afonso — Field Notes · A product team of one