2023 - 2025
Entendre Finance
Double-entry crypto accounting with AI-assisted workflows
Joined pre-launch as an early engineer. Over two years, grew from implementing specs to owning entire systemsβbilling, background infrastructure, and reporting.
Role
Full-Stack Engineer
Stack
Next.js, Node.js, MongoDB, AWS
Focus
Billing, Background Jobs, Financial Reporting, Onboarding, Third-Party Integrations, CI/CD
TL;DR
- Built visual rules engine with user-configurable cron jobs for automated transaction classification
- Owned Stripe billing integration, background job infrastructure, and financial reporting
- Shipped multi-timezone support, third-party GL sync (QuickBooks/Xero), and full accounting period management
- Implemented pixel-perfect UI components from Figma, filtering system (shadcn), and API layer (TanStack Query, JWT auth)
The Problem
Crypto accounting is a nightmare. Transactions flow in from dozens of wallets and exchanges, each with different data formats. Accountants must classify thousands of transactions into proper journal entries - doing this manually is slow, error-prone, and doesn't scale. Teams needed a way to define classification rules once and have the system apply them automatically across their entire transaction history.
Rules Engine UI
A visual condition-builder letting users create classification rules (e.g., "if source wallet is X and amount > Y, categorize as revenue") that auto-generate journal entries. Users could define complex conditions with AND/OR logic, preview matching transactions, and see journal entries before committing. Also built user-configurable cron jobs for scheduled classification.
Rules Builder Demo
If all of these conditions match:
Then classify as:
Background Job Infrastructure
Reliable pipelines for backfills, asset snapshots, reconciliation, and long-running transaction processing with retry logic and failure recovery. Jobs could be triggered from anywhere in the UI - a sheet, a modal, a bulk action. Each showed inline progress, but if users navigated away, tracking moved to a global job tracker in the corner. Users could monitor all running jobs, pause or cancel them, and see real-time progress without losing context.
Background Job Flow
IdleBackground Job Tracker
Jobs follow you across the app
Stripe Billing Integration
Full subscription lifecycle: trials, plan enforcement, upgrades, and payment reliability. Handled edge cases like failed payments, mid-cycle plan changes, and usage-based billing.
Stripe Onboarding Flow
ReadyS3 Presigned URL Uploads
Secure file attachments via presigned URLs. Files upload directly to S3, bypassing our servers. S3 events trigger Lambda to update database references.
S3 Presigned URL Upload
ReadyMulti-Timezone Support
Different firms needed different end-of-day cutoffs based on location. Implemented organization-level timezone configuration affecting all timestamps, reports, and data filtering. Critically, accounting periods depend on timezone - a transaction at 11 PM UTC on March 31 falls in March for a London firm but April for a Tokyo firm. Changing timezone invalidates existing journal entries and requires re-classification, so users see a confirmation showing exactly which periods and entries will be affected before proceeding.
Timezone & Period Boundaries
See how timezone affects which period a transaction falls into
Third-Party GL Sync
Streamlined QuickBooks and Xero integration into a unified service handling authentication, field mapping, and error recovery consistently across platforms.
Sync to External Ledgers
89 journal entries ready to sync
Last sync: 2 days ago
Last sync: 5 days ago
Accounting Period Management
- Journal entry rollups for period closes
- On-demand ledger balance recalculation
- Impairment workflows with audit trails
Accounting Periods
Period close workflow with timezone-aware cutoffs
Financial Reporting
All reports (balance sheet, trial balance, income statement) are powered by pre-computed account balances, not calculated on-the-fly. When a period closes, ending balances are computed from journal entries and carried forward as the next period's opening balance. This makes reports instant regardless of transaction volume.
- Balance sheet, trial balance, income statement
- Timezone-aware date filtering
- CSV export for downstream analysis
Balance Pre-computation
Closing balances carry forward to next period
App-Wide Filtering
Unified filtering across all views: date ranges, wallets, accounts, categories, tags. Backend DRY filter helpers - composable and unit testable.
Persistent Tabs
Power users needed to save their workspace configurations. Built a tabs system persisted to database and exposed via API, allowing users to save UI state including default filters, column preferences, and view settings. Hybrid storage with localStorage for instant load and API sync for cross-device access. Each tab remembers exactly how the user left it.
Persistent Tabs
Workspace configurations saved to DB & localStorage
Table Components
- Backend-driven multi-column sorting (any asc/desc combination)
- Infinite scroll, row selection, inline actions
- Custom cell renderers for currencies, debits/credits, dates, status
- Pixel-perfect implementation from Figma specs
Page Headers & API Layer
- Responsive headers from Figma: title, breadcrumbs, action buttons
- TanStack Query with centralized query keys
- JWT + refresh token flow via Axios interceptor
Technical Approach
Prioritized composable, testable code. Filter helpers, API hooks, and UI components designed for reuse. Figma specs followed precisely. Rules engine useddeclarative JSON β simpler UI, auditable rules, predictable execution.
Outcome
Collaborated closely with the team to ship multiple projects under tight deadlines β billing, background infrastructure, reporting, and the rules engine among them. Together we delivered a full-featured accounting platform with reliable background jobs at scale, seamless billing lifecycle, accurate multi-timezone reporting, and consistent UI across complex data views. The rules engine significantly reduced manual classification work for end users.