Available now · open to remote

Washington
Cardoso.

Full-Stack Developer / Ruby on Rails / 4 years

I make slow Rails apps fast and keep them correct, on software used every day by 50+ Brazilian municipalities.

Measured in production

Critical endpoint

3.5 s → 180 ms

19× faster

CSV export, 1.77M rows

~80 h → 7 min

~690× faster

Query on 14M rows

12.7 s → 0.2 ms

63,500× faster

Test coverage

35% → 85%

+50 percentage points

50+
municipalities on one codebase
17
releases in 5 months as main author
99.9%
uptime on an unstable provider
0
downtime index migrations

Things I built

All 21 projects →

Project · In production at Engemil

ObraHub

Labor tracking and billing for an industrial contractor that ran on paper, spreadsheets and retyping. Built round by round with the person who did the job by hand.

  • Re-uploading a file never duplicates a row
  • Billing workbook exported identical to the client's reference file
  • 11,551 hours closed in its first month

Rails 8 · Hotwire · PostgreSQL · Pundit

Read the case study →
obrahub.up.railway.app · Dashboard
ObraHub dashboard: 354 hours worked in 30 days, with a daily bar chart
✓ 899 examples, 0 failures1,395 entries validated in 3 s0 duplicates on re-upload
swarm
Swarm with a Claude Code session on the left and the diff review on the right

Project · Desktop app

Swarm

A workspace that runs one to four coding agents in parallel, each in its own git worktree, streamed live from a real terminal.

  • Every task gets a PRD before any code is written
  • Cron schedules, failed CI runs and Trello cards start tasks on their own
  • Line comments on the diff flow back to the agent
  • PR bodies written from the real diff and check results

Rails 8 · ActionCable · SQLite · Tauri 2

See how it works →

Project · AWS

Serverless e-commerce API

Four Lambdas, four different triggers, in a private VPC. Every guarantee has a test that proves it.

  • 4 buyers fight over 1 unit: exactly one wins
  • 3 retries with the same key become one order
  • Queue down? Events wait in the outbox

Node · Lambda · SQS · Terraform · SageMaker

Read the case study →
client ──▶ API Gateway ──▶ λ api ──▶ RDS Proxy ──▶ PostgreSQL
                                  │
                                  └──▶ outbox (same transaction)

EventBridge ──▶ λ dispatcher ──▶ SQS ──▶ λ worker
                                     └──▶ DLQ

λ ops   no HTTP route: migrations, admin tasks

One bug, start to finish

The same protocol number, three times.

A double-click in a municipal records system issued duplicate protocol numbers. The next number came from MAX(number) + 1, read without a lock.

A transaction-scoped advisory lock per department and year fixed it without serialising the whole table. A uniqueness check stays as the second line of defence.

Causeread-then-write race

Fixpg_advisory_xact_lock

Scopedepartment + year

app/models/protocol.rb · simplified
- number = scope.maximum(:number).to_i + 1
+ Protocol.transaction do
+   advisory_lock(department_id, year)
+   number = scope.maximum(:number).to_i + 1
+   create!(number:, department_id:, year:)
+ end

What people I worked with say

“He structured an automated testing initiative that took the RSpec suite's coverage from 35% to 89%. Along the way he mentored me: creating testing cards in Trello, explaining which scenarios had to be covered and reviewing my implementations.”
SamuelDeveloper · Was AdvisoryCompras project · RSpec mentorship
1 / 3

Experience

  1. Aug 2023 – Oct 2026

    Full-Stack Developer · Was Advisory (contract)

    Rails backend for a multi-tenant tax and debt platform serving 50+ municipalities. Led performance work, the Debt Statement module, the SINAL API integration and the Rails 7 → 8 migration of the debt agreements module.

    • Cut a critical endpoint from 3.5 s to 180 ms by removing N+1 queries and adding a 3-layer Redis cache, on 10k+ requests a day.
    • Rebuilt the CSV export as an async pipeline (Sidekiq, PostgreSQL COPY, streaming to S3): 1.77M records went from ~80 h to 7 min.
    • Designed composite indexes on a 14M-row base, taking a query from 12.7 s to 0.2 ms.
    • Built the Debt Statement module from scratch as main author, 17 releases in 5 months, and closed its recurring 500 errors.
    • Made taxpayer debt totals match to the cent across three screens that disagreed in production, with one shared resolver.
    • Integrated the SINAL API (100k+ records/month) with circuit breaker, retries and outbox: 99.9% uptime and zero duplicates on an unstable provider.
    • Fixed a race that issued the same protocol number 3× on double-click, using a scoped pg_advisory_xact_lock.
    • Removed 33 unused indexes and added unique ones with concurrent migrations, zero downtime.
    • Raised test coverage from 35% to 85% with RSpec and Capybara, plus RuboCop and Brakeman in CI.
    • Evolved the Debt Agreements module through the Rails 7 → 8 migration with 15+ per-municipality feature flags: 60% faster delivery, 59% fewer support tickets.
    • Ran production on Kubernetes with ArgoCD, Grafana and Datadog, catching incidents before users did.

    Rails · PostgreSQL · Sidekiq · Redis · Kubernetes · Datadog

  2. Jun 2023 – Jul 2023

    Full-Stack Developer · GoTechDS

    • Shipped features on the Go Tech DS product with Rails and Devise, from Trello cards prioritised by the team.
    • Built the authentication flow (login, signup, password recovery) and the dashboard.
    • Ramped up fast on a new codebase through code reviews and pair programming.
  3. Nov 2022 – May 2023

    Full-Stack Developer · Independent

    • Delivered blogs, landing pages and small products for direct clients, from discovery to production.
    • Handled client communication, scope and pricing myself, with clients who came back.
    • Picked up whatever each job needed: Stimulus, Tailwind, AWS S3, payment gateways.

How I work

899 / 0

Tests come first

ObraHub ships with 899 examples and zero failures. Every guarantee I claim has a test that tries to break it.

0 dupes

Safe to retry

Idempotency keys, outboxes and advisory locks, so double-clicks, retries and flaky providers don't create bad data.

33 indexes

Small, safe steps

Removed 33 unused indexes with concurrent migrations and zero downtime. Measure first, change one thing, measure again.

Technical skills

Used in productionBuilt with

Languages
Used in production: RubyUsed in production: SQLUsed in production: JavaScriptTypeScriptPythonShellKotlinC#ElixirRust
Frameworks
Used in production: Ruby on RailsUsed in production: HotwireUsed in production: StimulusUsed in production: ReactNode.jsNext.jsTailwind CSSTauriSinatraSpring BootDjango.NETPhoenixEmber.jsReact NativeElectron
Databases
Used in production: PostgreSQLUsed in production: RedisSQLiteMySQLElasticsearchSQL Server
DevOps & cloud
Used in production: SidekiqUsed in production: KubernetesUsed in production: ArgoCDUsed in production: DatadogUsed in production: GrafanaUsed in production: AWS S3Used in production: DockerUsed in production: CI/CDUsed in production: GitUsed in production: LinuxTerraformAWS LambdaSolid QueueRabbitMQOpenTelemetry
Testing & quality
Used in production: RSpecUsed in production: TDDUsed in production: CapybaraUsed in production: RuboCopUsed in production: BrakemanSeleniumTestcontainers
Architecture
Used in production: Multi-tenant SaaSUsed in production: RESTful APIsUsed in production: Event-driven / outboxUsed in production: Clean ArchitectureWebSocketsGraphQLMCPRAGClaude API