Work
OwnOwn product · Applied AI
FirstCommit

FirstCommit

An employability SaaS that connects AI-built CVs, GitHub profiles and job matching for junior developers.

Screenshot of FirstCommit (1/2)
Screenshot of FirstCommit (2/2)
SYSTEM.md

The problem

Landing a first tech job means translating projects and skills into a profile that connects with relevant openings.

What I built

I designed three macro-services: a Core API in Go, an AI Engine in Python and a Python scraper that runs as a job. They generate the CV, analyze GitHub and search openings by meaning.

Outcome

A product that brings together profile preparation and opportunity discovery. No public demo yet.

Decisions that mattered

  1. 01

    Three macro-services, two languages

    Go where latency matters (auth, feed, payments) and Python where the AI and scraping ecosystem lives. Hexagonal architecture on the backend.

  2. 02

    One queue between Go and Python

    The Core API never calls the AI Engine directly: it enqueues on Cloud Tasks. A 60-second generation never blocks the API.

  3. 03

    Vectors inside the database

    pgvector on Supabase relates a profile to openings by meaning, without a separate vector service.

  4. 04

    Near-zero fixed cost

    Cloud Run, Supabase, Cloudflare Pages and R2 keep the total budget under US$65 a month, LLM included.

  5. 05

    Secrets and least privilege

    Secret Manager mounts secrets into Cloud Run, and each service has its own service account with minimal permissions.

Technologies

  • Go
  • Python
  • Angular
  • Supabase
  • pgvector
  • Cloud Run
  • Cloud Tasks

C4 model. The pulsing line is the main path of a request.

Level 1 · who uses the system and what it connects to

HTTPS1RESTAPIs ·scrapingLiteLLMWebhooksJunior developerLooking for a first jobFirstCommitAI-powered employabilityGitHub[REST]Profile and repositoriesJob sources[APIs · HTML]Public APIs and scrapingLLM APIs[LiteLLM · Helicone]Behind LiteLLM and HeliconeMercado Pago[Mercado Pago]Subscriptions

Level 2 · the applications and data stores it is made of

HTTP ·HTMLHTTPS1REST · JWT2WebhooksHTTPSS3 APISQLenqueue3HTTP push4RESTpgvectorLLM API5Job sources[APIs · HTML]Public APIs and scrapingScraper[Python · Cloud Run Job]Scheduled batch of jobpostsMercado Pago[Mercado Pago]SubscriptionsResend[Resend]Opportunity alertsJunior developerLooking for a first jobWeb app[Angular 22 · Cloudflare Pages]Profile, jobs and CVCore API[Go · Fiber · Cloud Run]Auth, feed, profile andpaymentsFiles[Cloudflare R2]CV PDFsTask queue[GCP Cloud Tasks]Only channel from Core toAI EngineDatabase[Supabase · PostgreSQL · pgvector]Data, auth and vectorsGitHub[REST]Profile and repositoriesAI Engine[Python 3.12 · FastAPI · CloudRun]CV, GitHub analysis andmatchingLLM APIs[LiteLLM · Helicone]Behind LiteLLM and Helicone

Level 3 · the components inside the API

calls1rulesport2SQL ·Supabase3portenqueueportWebhooksHTTP handlers[Fiber handlers]Fiber, with rate limitingUse cases[Use cases]Auth, feed, profile andpaymentsDomain[Domain]Rules with no dependenciesData adapter[Supabase adapter]Supabase and pgvectorDatabase[Supabase · PostgreSQL · pgvector]Data, auth and vectorsQueue adapter[Cloud Tasks adapter]Enqueues on Cloud TasksTask queue[GCP Cloud Tasks]Only channel from Core toAI EnginePayments adapter[mercadopago/sdk-go]Official Mercado Pago SDKMercado Pago[Mercado Pago]Subscriptions
  • Person
  • System
  • Container
  • Database
  • External
  • Main path
  1. 01Profile
  2. 02Core API · Go
  3. 03Task queue
  4. 04AI Engine · Python
  5. 05LLM and pgvector
  6. 06CV and openings

CV

Get my CV

Leave your email and I will send the CV there. First I check the address is yours with a code.