Skip to main content

My Development Workflow

I build lean, reproducible systems that move unstructured or messy data to a clean DB and generate simple surfaces, with containers first, logs everywhere, and a doc-as-you-go mentality.

My Toolchain & Scaffolding

Backend & Web

Rails 8
Ruby 3.2, Postgres, Redis
Turbo/Stimulus
Live updates, minimal JS
Devise + ActiveAdmin
Auth & ops control
Importmap
Avoid JS toolchain drift

Frontend & Modern Web

Next.js 15 + React 19
App Router, TypeScript, modern patterns
Tailwind CSS
Utility-first CSS with custom design system
Framer Motion
Performance-optimized animations
Component Architecture
Reusable, composable components

Data & ETL

Python + Pandas
Standard libs, ad-hoc scripts
Google Document AI
Hand-labeled training data
Runner/Orchestrator
Wrapped script execution
JSON → DB
Direct ingestion, Excel for QA only

Packaging & Deployment

Docker/Compose
Dev + prod, dedicated Dockerfile.dev
Heroku Containers
Build/push/release workflow
Non-root users
Security-first container design
MkDocs + Runbooks
Copy-pasteable steps

How I Actually Move Code

Local Development

MacBook Air workflow with containerized consistency

Process:

  • Spin with Docker Compose
  • Local Postgres seeded from prod (read-only)
  • Mirror prod shape/scale
  • Chrome/Chromedriver baked in containers

Gotchas & Solutions:

  • Fix permissions/ownership
  • Mount code volumes
  • Run Rails + workers

Frontend Development

Modern web development with performance-first approach

Process:

  • Component-first architecture with TypeScript
  • Tailwind CSS utility classes + custom design system
  • Framer Motion for 60fps animations
  • Performance monitoring and optimization

Gotchas & Solutions:

  • Bundle size optimization
  • Accessibility compliance
  • Mobile-first responsive design
  • SEO optimization

Data Processing

ETL pipeline with Python scripts and Rails integration

Process:

  • Ingestion → extraction → mapping → normalization
  • Log every step, continue on error
  • Dynamic paths with /app/... roots
  • Trigger Rails Rake tasks for backfills

Gotchas & Solutions:

  • Idempotent imports
  • Unique keys (doc_id/filing IDs)
  • Raw→staged→clean lanes

Document AI Extraction

My signature moves for complex document parsing

Process:

  • Hand-label training data (tables/fields/boxes)
  • Parent/child schemas mirroring visual logic
  • Transaction-Row modeling for X-mark tables
  • Ticker extraction with fallbacks

Gotchas & Solutions:

  • Document AI has DateTime, not Date
  • Normalize downstream
  • Accept parsing limitations

Production Deployment

Heroku container workflow I learned the hard way

Process:

  • docker build -t registry.heroku.com/<app>/web .
  • docker push registry.heroku.com/<app>/web
  • heroku container:release web -a <app>
  • Never git push heroku main again

Gotchas & Solutions:

  • Registry login/API key friction
  • Use Heroku config vars
  • Verify service-account scopes

What I Excel At

Container-First Development

I've eliminated local snowflakes entirely

Every developer can spin my stack with Docker and run the same scripts. No more 'works on my machine' issues.

Full-Stack Performance

Performance optimization from database to UI

I optimize at every layer - from database queries and API responses to frontend bundle sizes and animations. Every feature is designed with performance in mind from the start.

Data Correctness First

Schemas, enums, and idempotency reduce downstream chaos

I normalize data ranges, timestamps, and statuses before any UI/BI work begins.

Clear Ops Surface

ActiveAdmin + logs + simple dashboards give me 'eyes' on the system

I prefer simple BI surfaces (Google Sheets/Looker Studio) over fancy dashboards for demos.

Bias to Ship

I unblock fast instead of stalling for perfection

When Redis session store complicated auth during Docker dev, I pragmatically used cookie store to keep moving.

What I'm Working On

Automated Checks

Slim CI with lint, unit tests, DB migration smoke-tests

Frontend Performance

Core Web Vitals optimization and bundle analysis

Idempotent Loaders

Enforce unique constraints + upserts on all ingestion points

Central Config

One settings module that parses env + defaults

Metrics & Monitoring

Minimal Prometheus-style counters to catch regressions early

Release Playbook

Single make release that builds, tags, pushes, migrates

Ready to See This Workflow in Action?

Explore the portfolio architecture to see these workflow principles implemented, or dive into the technical details of how I build reproducible systems.