sedes
architected and led development of a full-stack property management saas platform for the italian hospitality industry, plus an ai back-office system (fund harness) for an investment fund client. owned all technical architecture decisions, led the product rebrand from dormify to sedes, presented to investors and accelerators as cto, and got accepted into the italy-based startup accelerator zest under their specialized ai magic mind program. production scale as of july 2026: 50 properties, ~2,500 spaces, 564 tenants, 10 field workers, and ~1,000 tracked tasks, with the whatsapp agents handling ~8,000 message turns and 5,750 tool invocations (september 2025 - september 2026, full-time)
Work
serverless microservices api
architected and led development of a multi-service backend deployed as 6-8 independent aws lambda functions behind api gateway, each owning a bounded domain with shared supabase infrastructure and a centralized authorization layer supporting both cognito oauth and custom otp flows
express.jsaws lambda / serverlessserverless frameworkaws api gatewaysupabaseaws cognitotypescript
client context system (multi-tenancy)
designed a multi-tenant saas architecture where a super admin can switch between client organizations, with all api queries, store hydration, and ui state scoped to the selected client. persistent across page reloads with hydration guards to prevent data leaking between tenants
zustandauth.jsexpress.jssupabasetypescript
ai compliance wizard
built a 5-step compliance workflow that ingests uploaded property documents, uses an openai model to extract designated usage types, then generates a complete list of required regulatory documents per italian law (duvri, messa a terra, etc.) with editable verification cards, a compliance calendar tracking expiry deadlines, and async lambda self-invocation for heavy ai processing
openai apiaws lambda / serverlessaws s3daypilotposthogtypescript
whatsapp ai bot (tenant agent)
built a conversational ai agent using the openai agents sdk that tenants interact with via whatsapp. it performs semantic search over a knowledge base of ingested property documents using text-embedding-3-small embeddings stored in supabase pgvector, resolves ambiguous space references, creates maintenance tickets with photo attachments, and hands off to human support when needed, all with multi-language awareness
openai agents sdkopenai apisupabasewhatsapp cloud apiaws lambda / serverlessnovutypescript
batch import with ai column mapping
built a csv/excel batch import system for tenant records that uses ai to map arbitrary spreadsheet columns to domain fields, with a drag-and-drop upload, editable preview table, entity resolution for properties/spaces, validation summary with per-cell error highlighting, and navigation guards to prevent data loss
openai apireactjsexpress.jstypescript
real-time chat system
implemented a real-time messaging system embedded within maintenance task views. supports text and image attachments via supabase storage, read receipts with per-user tracking, unread message badges across the dashboard, and collapsible chat sections that share context with the task property and space hierarchy
supabasezustandreactjstypescript
whatsapp cloud api integration
integrated the whatsapp cloud api for bidirectional messaging. supports multi-waba (whatsapp business account) routing, otp-based operator authentication via whatsapp templates, persona-aware message dispatch based on relationship type (tenant vs. operator), inline photo rendering, webhook signature validation, and async webhook processing via lambda self-invocation to avoid meta timeout backoff
whatsapp cloud apiaws lambda / serverlessnovusupabasetypescript
interactive space tree
built an interactive, hierarchical property/space visualization using reactflow. supports drag-to-move operations, expand/collapse controls, right-click context menus with crud actions, tag/floor indicators on nodes, and a synchronized table+tree dual view with search, all backed by a recursive parent-child data model
reactflowzustandag gridreactjstypescript
recurrence engine and calendar
engineered a recurring task system using the rrule specification. operators define frequency, interval, and max occurrences, and the system generates calendar events with status-based color coding in a daypilot calendar view, plus the ability to edit/delete individual occurrences or entire series, and convert one-off tasks to recurring
rruledaypilotzustandsupabaseaws lambda / serverlesstypescript
document repository with knowledge base
built a document management system with s3-backed storage, presigned url uploads, automatic text extraction via a dedicated document-processing lambda, and a rag pipeline that chunks documents, generates text-embedding-3-small embeddings, and stores them in supabase pgvector for semantic search. includes folder navigation by property/tag/category and a chunk viewer showing how documents were segmented for retrieval
aws s3aws lambda / serverlessopenai apisupabasereactjstypescript
security hardening
implemented defense-in-depth across the api. webhook signature validation (hmac) for meta callbacks, otp brute-force protection with atomic increment and code invalidation, s3 path traversal prevention, tenant isolation enforcement via role-based guards, rate limiting on all public endpoints, and fail-closed validation patterns
aws lambda / serverlessexpress.jssupabasetypescript
operator portal with otp auth
built a standalone portal for maintenance operators authenticated via whatsapp-delivered otp codes with signed jwt tokens in template links. features a filtered task list, task detail pages with photo uploads and comments, and italian localization. fully decoupled from the main admin dashboard with its own auth guard and session management
whatsapp cloud apireactjszustandexpress.jsaws lambda / serverlesstypescript
next.js operations dashboard
in order to secure an early important client (one of italy's top high-street apparel brands), i constructed a working next.js operations dashboard with auth, state layer, and three shipped modules in my first 10 working days. owned all technical architecture decisions for the platform, and leveraged zustand to design the application's entire client-side state layer
nextjszustandreactjstypescript
end-to-end operations flow
architected an end-to-end operations flow letting field workers receive, execute, and close cleaning or maintenance tasks with checklists, live elapsed-time tracking, and pricing
reactjszustandsupabasetypescript
user management and permissions
built the user-management and permissions system: invite flow, role/permission toggles, and access controls for the internal team
reactjsexpress.jssupabasetypescript
operator team management
based on conversations with staff about how operator organizations structure their staff, designed and built a full team-management system for the field operators: operator team creation, member invites, promotion/removal, and leadership permissions. later replaced the per-worker task assignment with a team-based ownership model, empowering the teams to distribute tasks amongst themselves. this removed complexity while adding capability
reactjsexpress.jssupabasetypescript
qr-code report portal
opened up a new pool of potential task requestors by launching a scannable qr-code report portal, a net-new external-facing product surface letting anyone report a maintenance issue: including a property-specific otp login, templated issue forms, and client-side image compression
reactjsexpress.jsaws s3typescript
real-time notification system
shipped a real-time notification system with novu end-to-end across the dashboard, worker app, and client report portal
novureactjsaws lambda / serverlesstypescript
maintenance analytics overview
built a maintenance analytics overview with click-filterable task metrics, backed by a supabase aggregation endpoint for quick retrieval
supabasereactjstypescript
location-aware property management
for a client with a property portfolio spanning multiple territories, added location-aware property management with iso-3166 country/region validation and location-based grouping and search
express.jssupabasereactjstypescript
task-resolution confirmation workflow
delivered a task-resolution confirmation workflow letting client admins configure sign-off requirements and respond to completed work
reactjsexpress.jssupabasetypescript
platform infrastructure upgrades
upgraded the app to next.js 16 and added lambda warmup infrastructure across 5 microservices to cut cold-start latency. migrated deployment from netlify to vercel
nextjsaws lambda / serverlessverceltypescript
people participant system
built a people participant system across the full stack, crucial for the tracking of operators and staff, and set the foundation for a crm to manage property tenants. to transform the contact directory into a full tenant-records system, expanded the participant data model to include address, identification, billing, financial, guarantor, and employment sections with batch csv upload/deletion
express.jssupabasereactjstypescript
participant api optimization
to facilitate the sheer amount of tenants from one of our enterprise clients, cut the participant-list api from 102 queries to 3 (around 34x fewer), eliminating an n+1 bottleneck and adding supporting database indexes, keeping the new directory fast as contact volume grows
postgresqlsupabaseexpress.jstypescript
bulk task operations
for operators managing tasks at volume (in particular for task archival), added bulk task operations: multi-select assign/delete across maintenance tables with matching batch api endpoints and rate-limit protection
reactjsexpress.jssupabasetypescript
task planner
built a task planner drag-and-drop bulk scheduling tool with a weekly/daily grid via dnd-kit, with assignment overlap validation
dnd kitreactjszustandtypescript
whatsapp operator agent
shipped a second ai agent (the operator agent) for the whatsapp channel with its own tools and interactive whatsapp flows for task completion (photo/comment capture), extending the conversational product from tenants to field operators
openai agents sdkwhatsapp cloud apiaws lambda / serverlesstypescript
ai task-rescheduling engine
built an ai task-rescheduling engine: when an operator cancels or goes unavailable, it re-ranks and reassigns their maintenance tasks taking into account priority and duration-fit. introduced a third ai whatsapp bot persona (the staff agent) that lets property managers trigger and preview reschedules conversationally
openai agents sdkopenai apiwhatsapp cloud apiaws lambda / serverlesstypescript
ai task-duration estimation
added ai-powered task-duration estimation to speed up task creation: llm with validated, clamped output
openai apiexpress.jstypescript
task export to pdf and excel
to help our clients with their internal tracking, shipped task export to pdf and excel with a 90-day range cap and leak-safe output
express.jsaws lambda / serverlesstypescript
in-chat message translation
added in-chat message translation (using aws translate) so operators and tenants could communicate across languages
aws translateexpress.jsreactjstypescript
prompt-evaluation subsystem
built a prompt-evaluation subsystem to score bot-response quality, helping us ensure that clients could signal any issues with the bot easily and effectively
openai apitypescript
customer-support discord bridge
launched a customer-support channel bridging in-app chat to discord by introducing a support button within the platform whose messages we could respond to directly from discord
discord apiexpress.jsreactjstypescript
gdpr-compliant product analytics
integrated posthog product analytics behind an eu reverse proxy for gdpr compliance
posthognextjstypescript
compliance-report generator
shipped a compliance-report generator on self-invoking async lambda infrastructure, enabling long-running document generation without blocking request timeouts
aws lambda / serverlessaws s3typescript
backend tooling standardization
standardized tooling across the backend: migrated the whole codebase to the biome linter/formatter and from jest to vitest
biomevitesttypescript
whatsapp tech provider application
coordinated the entire application for whatsapp cloud api tech provider status, including video demos and configuring a sandbox staging environment to test the platform's messaging capabilities
whatsapp cloud apistakeholder communication
tdd practice and mentoring
introduced the practice of tdd development and enforced its usage for myself and a junior developer, whom i onboarded in particular to help with less demanding parts of the product such as coordinating with the project manager on developing and maintaining the landing page
test-driven developmentmentoringtechnical leadership
fund harness ai back-office system
coordinated with a new enterprise client on a custom solution to their back-office management. started and built, single-handedly, an ai back-office system for an investment fund: it ingests financial documents from forwarded emails/whatsapp, classifies them under double-entry accounting rules, files them into an erp software, and indexes everything into a per-company vector knowledge base fund managers can query in natural language. production scale (june 15 - july 31, 2026): 5,114 documents processed across 5,258 agent runs (~110 docs/day) for 6 onboarded companies, with 97.1% of runs completing fully autonomously on italian financial documents. architected, implemented, and delivered solo, from ideation to delivery within two months, ingesting 5k+ documents in multiple languages (mostly english and italian)
openai agents sdkqdrantpostgresqlaws bedrocktypescript
multi-agent document pipeline
designed and built an autonomous multi-agent document-processing pipeline with the openai agents sdk to turn financial documents into structured accounting records with no manual entry
openai agents sdktypescript
multi-tenant vector knowledge base
built a multi-tenant vector knowledge base with qdrant, giving fund managers natural-language q&a ("how is portfolio company x performing?") over each company's entire document history, isolated per tenant
qdrantopenai apitypescript
local-first pipeline trace ui
engineered the system for testable, local-first development with a live pipeline-trace web ui so the full agent pipeline could be run and debugged locally without deploying
reactjstypescript
multi-provider model routing
configured aws bedrock with claude models to power the fund harness ai agents, then migrated model routing to vertex gemini (eu multi-region, with regional pricing correction) across ingestion and the assistant
aws bedrockvertex aitypescript
automated lp-report generator
built an automated lp-report generator which resolves financial data into excel field-bindings, renders powerpoint decks, and generates ai narrative commentary. this produced monthly/quarterly investor reports (fully mapped for real portfolio companies) that previously would be assembled by hand, then validated its correctness with the fund managers
openai apitypescript
postgres runs engine and ocr suite
rebuilt the execution core as a postgres-backed runs engine with streaming step events, quarantine gating, and crash-recovery resume, and ported a 9-provider ocr/vision extractor suite (textract, claude, gemini, mistral, kimi, qwen) into it behind a registry and cost model. the 9-provider suite exists because the corpus is italian financial documents and no public benchmarks covered italian extraction quality, so comparative evaluation was built to find which provider produced correct structured italian output
postgresqlocraws bedrockvertex aitypescript
human-in-the-loop approval flow
added a human-in-the-loop approval flow for outbound messages (claim / edit-on-approve / reject in a needs-attention feed) to keep a person in control of anything the system sends externally
reactjspostgresqltypescript
google drive sync engine
built a bidirectional google drive sync as a read, plan, and apply reconcile engine, plus a change-feed pull engine (queue, change normalization, adopt/dedupe/retry disposition, systemd-timer driven) and an entity-based drive folder taxonomy, so documents dropped in drive flow automatically into the pipeline
google drive apipostgresqltypescript
email-sender authentication gate
hardened email-sender authentication with a dkim/dmarc gate that blocks spoofed senders before ingestion
typescript
entity-resolution graph engine
built an entity-resolution graph engine which resolves people/companies from extracted documents into a deduplicated node/edge graph (ownership, guarantees, investments) with provenance-merged attributes and precision guards (transliteration folding, codice-fiscale checksum validation, homonym protection). this acts as the structured backbone tying every document to real-world entities
postgresqltypescript
auto-generated company wiki
built an auto-generated per-company wiki that composes knowledge from graph facts, then re-architected it into a fragment-store model with domain-labeled access clearance, so each reader sees only the facts their role is cleared for, with citations back to source documents. a custom solution built off karpathy's llm wiki concept published in april 2026
postgresqlopenai apitypescript
client-facing ai email assistant
shipped a client-facing ai email assistant: a bilingual (en/it) agent that answers portfolio questions over the knowledge base with scoped access control, threaded replies, and attachment handling. wired end-to-end into inbound email (ask@/chiedi@ routing), letting fund clients self-serve answers by email
openai agents sdkqdranttypescript
office format ingestion
extended ingestion to office formats (xlsx/csv/docx with per-sheet indexing)
typescript
requester model rearchitecture
rearchitected the whatsapp agent after a wrong early bet: the initial design, shaped by a student-housing client, assumed every user was a tenant tied to a bookable space. generalized it to a requester model, with requester groups and printable qr codes for self-onboarding, so retail stores and vineyards could adopt it without the tenant concept. expanded the addressable client pool roughly tenfold
openai agents sdkwhatsapp cloud apiexpress.jssupabasetypescript
gdpr-first infrastructure
designed per-client dedicated encrypted ec2 instances (milan) with no shared database, chosen deliberately for gdpr compliance and client trust. the only network path in is a vpc-private dispatch layer; all llm inference runs on eu-resident bedrock endpoints with provider-side logging disabled, and agent logs are retained on the client's own instance for their auditors only. containerized per-company build boxes with docker
awsdockeraws bedrocktypescript
hierarchical scope and permission model
built a tree-structured org-scope model (fund, holding operators, sub-companies, auditors) enforced at the database level for ingestion and retrieval, including scope-filtered vector queries cross-checked against the relational store before content is surfaced. supports clean carve-out of a sub-company (documents, vector indexes, ledger access) on sale or wind-down without residual data leakage, plus an append-only audit log: who approved what, who saw what and when, reconstructable across the fund
postgresqlqdranttypescript
service selection by bake-off
compiled use cases and edge cases from client conversations and the agreed mvp requirements, then ran candidate services for each macro-group (ledger, object storage, vector db) through a comparative bake-off. erpnext, minio, and qdrant won their groups; postgres was chosen up front on a ship-first philosophy
erpnextminioqdrantpostgresql
adoption-first ingestion
after observing that traditional-business clients resist onboarding yet another saas product, designed the system to integrate non-invasively into tools clients already use: email auto-forward/cc ingests every message into the unified knowledge base, whatsapp lets users snap a photo of a physical receipt and have the data extracted and matched against related quotations and invoices, and existing google drive or microsoft teams repositories are read directly. value from the first forwarded message instead of months-long enterprise onboarding
whatsapp cloud apigoogle drive apiqdranttypescript