Gabriel Pereira

Unsaid

Most people journal to vent, not to understand themselves. Unsaid turns the habit into a feedback loop: immediate AI reflection per entry, pattern detection across weeks of writing, and a deeper synthesis every 15 entries that names what's actually changing.

  • AI pipeline designed around user moments, not model capability: lightweight reflection per entry (fast, immediate), pattern synthesis across entries (weekly, background), milestone synthesis at 15 entries. Each tier has different latency, cost, and value.
  • Encrypted at the database layer, not just behind an auth gate. AES-256-GCM at rest with row-level security enforcing per-user data isolation. A meaningful distinction when the content is personal.
  • Full pipeline in a single request, streamed and encrypted end to end. The user sees their reflection immediately; the audit trail happens underneath without adding latency.
Next.jsTypeScriptSupabaseAnthropicClerkLemon Squeezy
byunsaid.com

P4M

Multi-tenant SaaS for facility maintenance teams. Covers the full operations workflow, equipment tracking, work orders, maintenance routes, and structured change management for production floors.

  • Reduced PHPStan errors from ~3,800 to zero at max strictness (level 9), enforcing strict_types across the entire codebase via Rector
  • Led JavaScript-to-TypeScript migration on the frontend.
  • Designed and built client feature requests end-to-end
  • Set up linting, formatting, and Husky pre-commit/pre-push quality gates to keep PHPStan passing as the codebase evolves
LaravelVue 3TypeScriptPHPStanRectorAndroid

APLO

Platform for optometry practices in Portugal. Scheduling, prescriptions, and payments, built to handle the actual rules optometrists and pharmacies follow here.

  • Built appointment and calendar system with daily/weekly/monthly views, drag-to-reschedule, and overlap validation
  • Implemented PDF prescription generation across four declaration types matched to Portuguese formatting requirements
  • Delivered end-to-end payment processing with Multibanco and MBWay including gross-up logic, quarterly reminders, and subscription suspension
  • Built patient duplicate detection using NIF regex validation, composite uniqueness index, and pre-submission duplicate check
LaravelVue 3TypeScriptPDFMultibancoInfobip

Central Lobão

After-sales case submission portal for a tools and equipment distributor. Two distinct flows (B2B and public), wired into Jira Service Management for case lifecycle. The interesting parts were the security model and making it work unattended in production.

  • Designed and built the full case submission portal: separate B2B and public flows integrated with Jira Service Management for status tracking
  • Implemented HMAC-signed B2B comment identity with nonce persistence for replay prevention
  • Wired Jira OAuth 3LO for continuous unattended API access, no manual token refresh in production
  • Built the public Next.js intake form with 5-locale i18n (pt/en/es/fr/de), iron-session, and a verification flow
ASP.NET CoreNext.jsTypeScriptJira APIOAuth 3LOi18n

AVP Codes

Internal codes management tool for Allianz. Replaced a fragile manual process with a secure, role-based web tool for bulk affiliate promo code operations across isolated UAT/SI/PROD environments.

  • Replaced a fragile manual Node.js script with a secure web tool for bulk affiliate promotional code operations across three isolated Turso databases (UAT/SI/PROD)
  • Built role-based access control with bcrypt auth and signed HTTP-only cookie sessions, all database operations server-side only
  • Delivered automated error reporting, invalid CSV rows returned as correctable downloadable files
  • 43 unit tests covering authz, mutations, and migrations; integrated with SAP order system for affiliate order creation
React Router v7TypeScriptTursoVitestSAP

AVP

Customer-facing benefits platform. Worked across the catalogue: multi-variant products, locale-specific rules, and a long tail of filter/search bugs that needed actual debugging rather than band-aids.

  • Implemented multi-variant product modelling on Commercetools with per-locale display and eligibility rules
  • Added address validation blocking non-German delivery addresses at checkout via Dutch Post API, with locale-based quantity controls
  • Debugged and fixed persistent filter and search bugs across the catalogue, categories staying selected, points filter resetting, search losing focus
React Router v7TypeScriptCommercetools