understand
Understand the person’s position inside a system: what affects them, what they can see, and where their agency is constrained.


Software Developer | Systems Design & AI. I design and build software from data models and backend architecture to intuitive interfaces. Based in Porto, available for full-time roles.
Explore NEXUS↓THE POSITION
FEATURED WORK / NEXUS + MESH
I designed NEXUS to make research inspectable: 400 EU-funded projects connected to the Sustainable Development Goals through source passages, evidence checks and a recorded decision history. I built the data workflows and the interface that brings them together.
The validation work includes replay verification of 5,085 decisions across 24 runs. Mesh, the Python and SQLite governance library, adds immutable revisions, transactional commands and review controls, with 39 documented tests.
FOAAP / A PRODUCT I DESIGNED AND BUILT
Founder context gets scattered across chats, documents, and tools. FOAAP turns it into durable venture state, resolves contradictions, and exposes one high-leverage action.
FOAAP / STUDIOS
FOAAP Studios · Interface captureSwipe to explore ↔
THE THESIS
I build systems that help people investigate unfamiliar problems, connect evidence across domains, and turn that synthesis into decisions they can revisit.
Explore my GitHub ↗ fingerprint = digest(request) self.db.execute("BEGIN IMMEDIATE") try: prior = self.db.execute("SELECT * FROM commands WHERE actor=? AND key=?", (actor.id, request["idempotency_key"])).fetchone() if prior: require(prior["request_hash"] == fingerprint, "Idempotency key reused with different content", "version_conflict") result = json.loads(prior["response"])··· self.db.commit() return result except BaseException: self.db.rollback() raiseI built the governance layer behind NEXUS around immutable revisions, independent review and transactional commands. A retry returns the recorded result; reusing its key with different content is rejected.
The command and its recorded result commit together, or the transaction rolls back.
The host supplies trusted identities. Evidence integrity does not prove that an interpretation is correct.
select v.version into cur_version from public.venture_models v where v.user_id = p_user and v.venture_id = p_venture for update;··· if p_base = -1 or cur_version = p_base then update public.venture_models set model = p_model, version = cur_version + 1 where user_id = p_user and venture_id = p_venture; return query select 'ok'::text, cur_version + 1, p_model, now(); return; end if; return query select 'conflict'::text, v.version, v.model, v.updated_at from public.venture_models v where v.user_id = p_user and v.venture_id = p_venture;end $$;revoke all on function public.save_venture_model(uuid, text, jsonb, int) from public, anon, authenticated;A row lock serializes updates to an existing model. The caller supplies a base version; a stale save returns a conflict and the current server state so the application can reconcile it.
Concurrency is part of the persistence contract.
The force-save path (p_base = -1) is explicit. Public, anonymous and authenticated roles are denied direct execution of this RPC.
const n = countOccurrences(rawText, q); if (n === 0) { errors.push(`quote_not_found: evidence_quotes[${i}] ${JSON.stringify(q.slice(0, 60))}`); } else if (n > 1) { errors.push(`ambiguous_quote: evidence_quotes[${i}] occurs ${n}+ times ${JSON.stringify(q.slice(0, 60))}`); } else { const start = rawText.indexOf(q); spans.push({ start, end: start + q.length, text: q }); }I keep model extractions as candidates. In anchorQuotes, a quote must occur exactly once in the original text before the validator accepts its source span. Missing or ambiguous evidence produces an explicit error.
The model supplies the quote. Deterministic code derives its position.
An exact match establishes provenance; it does not establish that the claim is true.
Exact excerpts from the linked revisions. Gaps indicate omitted lines. Each linked repository includes source that can be inspected publicly.
OWNED END TO END
Frame the problem, model its relationships and design how a person moves through the product.
Build the interface, backend and data workflows with React, Python, SQL and Supabase; integrate AI and deploy.
Test assumptions, trace decisions to evidence and handle conflicting state, failed operations and retries.

THE BUILDER
I am most engaged when information, workflows and decisions are scattered across disconnected pieces. I work through the structure underneath: the data model, backend architecture, state and relationships. Then I turn it into a coherent product with an interface that makes the complexity feel clear and intuitive.
I take ownership from problem framing and system design through implementation, testing and deployment. My work spans NEXUS and Mesh, FOAAP’s persistent state and memory workflows, and a property platform for a private client. What drives me is understanding a system deeply enough to make every part work together and make the result useful to someone else.
PORTO / REMOTE