{ "about": "Key-systems catalog for the source repos. Capability-first tags grouped into Integration / Domain / Surface facets; the specific provider(s) are in 'vendors', and each tag lists the underlying key systems. 'tasks' is the number of tasks that touch that tag/system in that repo (aggregate counts only \u2014 no task contents). Use it to see which areas are well-covered vs thin when picking a diverse new task to build.", "facets": [ "Integration", "Domain", "Surface" ], "repos": [ { "repo": "Palolo", "tasks": 306, "tags": [ { "tag": "Banking-Provider", "facet": "Integration", "definition": "Banking-as-a-service layer that provisions accounts/cards, moves money and runs identity \u2014 plus the in-repo provider seam and its fake. Via Solid.", "vendors": [ "Solid", "Liquid (in-repo mock)" ], "tasks": 41, "systems": [ { "system": "Solid BaaS", "definition": "Primary banking-as-a-service provider: opens accounts, issues cards, moves money, runs KYC.", "tasks": 36 }, { "system": "BaaS provider seam + Liquid/empty mocks", "definition": "The Provider interface + dispatch layer, and the in-repo fake providers (Liquid, empty) that tests swap in.", "tasks": 15 } ] }, { "tag": "Payroll-Providers", "facet": "Integration", "definition": "Payroll data integrations \u2014 member paycheck-connect and employer-side roster/pay providers, plus CSV import.", "vendors": [ "Argyle", "Tartan", "Finch", "Atomic", "Sparrow" ], "tasks": 23, "systems": [ { "system": "CSV payroll import", "definition": "In-house 'provider' ingesting employer payroll from uploaded CSV files.", "tasks": 8 }, { "system": "Argyle (member payroll)", "definition": "Worker-side paycheck-connection provider.", "tasks": 6 }, { "system": "Finch (employer payroll)", "definition": "Employer-side payroll roster/pay-data provider.", "tasks": 5 }, { "system": "Atomic (employer payroll + webhooks)", "definition": "Employer-side payroll provider; inbound webhooks with signature verification.", "tasks": 5 }, { "system": "Tartan (member payroll)", "definition": "Second worker-side paycheck-connection provider.", "tasks": 1 }, { "system": "Sparrow (employer payroll)", "definition": "Additional employer-payroll provider.", "tasks": 0 } ] }, { "tag": "Bank-Account-Linking", "facet": "Integration", "definition": "Linking & verifying external bank accounts (processor tokens, balances). Via Plaid.", "vendors": [ "Plaid" ], "tasks": 9, "systems": [ { "system": "Plaid bank-linking", "definition": "External bank-account linking / verification for external accounts.", "tasks": 9 } ] }, { "tag": "Cloud-Storage-Secrets", "facet": "Integration", "definition": "Cloud object storage + runtime secret fetching. Via AWS.", "vendors": [ "AWS S3", "AWS Secrets Manager" ], "tasks": 8, "systems": [ { "system": "AWS S3 + Secrets Manager", "definition": "Object storage (files/statements) + runtime secret fetching.", "tasks": 8 } ] }, { "tag": "SMS-Delivery", "facet": "Integration", "definition": "Outbound SMS for phone verification / 2FA. Via Twilio.", "vendors": [ "Twilio", "Short.io" ], "tasks": 5, "systems": [ { "system": "Twilio SMS", "definition": "Outbound SMS + phone-verification delivery.", "tasks": 5 } ] }, { "tag": "Monitoring-Analytics", "facet": "Integration", "definition": "Observability & product analytics \u2014 APM/metrics + event tracking. Via New Relic + Mixpanel.", "vendors": [ "New Relic", "Mixpanel", "Ahoy", "Blazer", "PgHero", "Flipper", "Sentry", "Slack" ], "tasks": 5, "systems": [ { "system": "New Relic monitoring", "definition": "Server APM + custom events/metrics.", "tasks": 4 }, { "system": "Mixpanel analytics", "definition": "Client-side product-analytics event tracking.", "tasks": 1 } ] }, { "tag": "Email-Delivery", "facet": "Integration", "definition": "Outbound transactional email \u2014 Palolo SendGrid dispatch; ZenBill Rails ActionMailer layer.", "vendors": [ "SendGrid (Palolo)", "ActionMailer (ZenBill)", "ActionMailer", "Postmark", "Mailgun", "Mandrill" ], "tasks": 3, "systems": [ { "system": "SendGrid email", "definition": "Outbound email delivery channel.", "tasks": 3 } ] }, { "tag": "Benefit-Routing", "facet": "Domain", "definition": "The engine that routes an incoming deposit across a member's enabled benefits by priority.", "vendors": [], "tasks": 66, "systems": [ { "system": "Transaction \u2192 perk routing engine", "definition": "Core engine routing an incoming deposit across perks by priority.", "tasks": 66 } ] }, { "tag": "Benefits-Framework", "facet": "Domain", "definition": "The benefit (\"perk\") extensibility spine \u2014 templates/instances, eligibility, opt-in \u2014 plus minor benefit types.", "vendors": [], "tasks": 59, "systems": [ { "system": "Perks framework", "definition": "Perk templates/instances, eligibility, opt-in/approval, org-enabled categories.", "tasks": 50 }, { "system": "Minor perks (stream/auto/badge/referral/message)", "definition": "Smaller perk types: paycheck-stream, auto-perks, badges, app-referral, in-app messages.", "tasks": 16 } ] }, { "tag": "Accounts-Cards", "facet": "Domain", "definition": "Checking accounts, card issuance/state/statements, and merchant-category (MCC) classification.", "vendors": [], "tasks": 51, "systems": [ { "system": "Financial accounts & cards", "definition": "Checking accounts, card issuance/state, card details/PIN tokens, statements.", "tasks": 51 }, { "system": "MCC merchant-category", "definition": "Merchant-category-code table + classification for card transactions.", "tasks": 2 } ] }, { "tag": "Loans-Lending", "facet": "Domain", "definition": "Loan products + repayment holds and the in-house/Offbo loan-provider logic (amortization, balances).", "vendors": [], "tasks": 50, "systems": [ { "system": "Loans & holds", "definition": "Loan perks + repayment holds routed at top priority.", "tasks": 50 }, { "system": "In-house loans provider", "definition": "In-house loan provider behind the loans interface.", "tasks": 7 }, { "system": "Offbo loans", "definition": "External loan-origination provider.", "tasks": 0 } ] }, { "tag": "Organizations-Admin", "facet": "Domain", "definition": "Org/multi-tenancy setup, members/roles/invites, per-org config & feature flags, admin/impersonation/audit, activity feed.", "vendors": [], "tasks": 50, "systems": [ { "system": "Member & org management (HQ)", "definition": "Employer org setup, members, roles, groups, invites, owners, notes/tags.", "tasks": 45 }, { "system": "Activity feed", "definition": "User-facing activity/event log.", "tasks": 5 }, { "system": "Feature flags", "definition": "Per-org feature-flag definitions/defaults gating behavior.", "tasks": 4 } ] }, { "tag": "Payroll-Sync", "facet": "Domain", "definition": "Paycheck/roster ingestion from providers and pay-cycle computation.", "vendors": [], "tasks": 43, "systems": [ { "system": "Payroll sync / paycheck ingestion", "definition": "Pulls member paychecks/roster from providers; computes pay cycles.", "tasks": 43 } ] }, { "tag": "Notifications-Messaging", "facet": "Domain", "definition": "Member-facing notification pipeline (enqueue->channel->dispatch), reminders, SSR email templates, internal Slack alerts, support chat.", "vendors": [ "Slack (internal alerts)", "Zendesk", "Intercom", "Noticed" ], "tasks": 39, "systems": [ { "system": "Member-facing notification pipeline", "definition": "Enqueue \u2192 channel selection \u2192 dispatch of member notifications across email/SMS/in-app.", "tasks": 32 }, { "system": "Reminders scheduler", "definition": "Scheduled reminder/nudge jobs on the queue.", "tasks": 8 }, { "system": "Email/SSR notification templates", "definition": "Separate Preact package that server-renders email/notification templates.", "tasks": 5 }, { "system": "Slack internal alerts", "definition": "Ops/internal notifications via Slack incoming webhooks.", "tasks": 3 }, { "system": "Zendesk help chat", "definition": "Client-side embedded support-chat widget.", "tasks": 2 } ] }, { "tag": "Savings-Products", "facet": "Domain", "definition": "Employer-matched savings + interest/vesting.", "vendors": [], "tasks": 36, "systems": [ { "system": "Savings (Save perk)", "definition": "Employer-matched savings pot + interest.", "tasks": 36 } ] }, { "tag": "Earned-Wage-Access", "facet": "Domain", "definition": "Advances against earned wages, repaid from the next deposit.", "vendors": [], "tasks": 33, "systems": [ { "system": "Earned-wage access (advances)", "definition": "'My Pay' advances against earned wages, repaid from next deposit.", "tasks": 33 } ] }, { "tag": "Auth-Sessions", "facet": "Domain", "definition": "Login, password hashing/reset, email verification, server-side session management.", "vendors": [ "Devise", "Google OAuth2" ], "tasks": 30, "systems": [ { "system": "Sessions & credential auth", "definition": "Login sessions, argon2 password hashing, session store.", "tasks": 30 } ] }, { "tag": "Underwriting-Risk", "facet": "Domain", "definition": "Income-stability estimation + loan-decision verdicts from paycheck history (the analyze/risk layer).", "vendors": [], "tasks": 20, "systems": [ { "system": "Underwriting / risk analysis", "definition": "Income-stability estimation + loan-decision verdicts from paycheck history.", "tasks": 20 } ] }, { "tag": "MFA-OTP", "facet": "Domain", "definition": "Second-factor auth \u2014 TOTP + SMS OTP, verification tokens, enable/toggle/disable.", "vendors": [], "tasks": 17, "systems": [ { "system": "MFA/OTP & verification tokens", "definition": "Auth factors (email/phone), OTP + verification-token issuance/verification.", "tasks": 17 } ] }, { "tag": "KYC-Compliance", "facet": "Domain", "definition": "Identity/business verification (KYC/KYB) incl. beneficial owners, ID documents, onboarding address autocomplete.", "vendors": [], "tasks": 13, "systems": [ { "system": "KYC/KYB compliance", "definition": "Identity verification of users (and businesses) via the BaaS provider.", "tasks": 13 } ] }, { "tag": "Data-Layer-Schema", "facet": "Surface", "definition": "Persistence & schema \u2014 Prisma data layer + codegen + shared Zod contracts (Palolo); ActiveRecord concerns + field encryption (ZenBill).", "vendors": [], "tasks": 82, "systems": [ { "system": "Prisma data layer", "definition": "Prisma client, query modules, and query middlewares (dayjs, defaults, zod).", "tasks": 35 }, { "system": "Shared Zod schema / API contracts", "definition": "Zod endpoint specs, params, pagination, DB/service schema shared by client + server.", "tasks": 35 }, { "system": "Shared library (models + helpers)", "definition": "Business-logic model helpers + cross-cutting helpers (dates, decimal, retry, format).", "tasks": 25 }, { "system": "Prisma codegen pipeline", "definition": "@include mixin expander + Prisma\u2192Zod generator producing schema.prisma and shared/schema/db.", "tasks": 10 } ] }, { "tag": "Web-Frontend", "facet": "Surface", "definition": "The browser SPAs \u2014 Palolo Preact (app + HQ) and ZenBill React (dashboard + onboarding) incl. the design system.", "vendors": [], "tasks": 78, "systems": [ { "system": "Preact SPA client (app + hq)", "definition": "Preact/Vite SPA: employee portal (/app) + admin portal (/hq), custom router, SWR hooks.", "tasks": 78 } ] }, { "tag": "Backend-Architecture", "facet": "Surface", "definition": "Request/API framework & business-logic layering \u2014 Express typed endpoints + rate limiting; Rails multi-audience API + ActiveInteraction service objects.", "vendors": [], "tasks": 47, "systems": [ { "system": "Express REST API + typed endpoint framework", "definition": "Express app, router, error handling, typed endpoint/handler abstraction.", "tasks": 44 }, { "system": "Rate limiting", "definition": "Token-bucket rate limiter middleware (default + stricter auth limiter).", "tasks": 6 } ] }, { "tag": "Background-Jobs", "facet": "Surface", "definition": "Async job processing \u2014 Palolo SQS worker + job registry; ZenBill Delayed Job.", "vendors": [], "tasks": 19, "systems": [ { "system": "SQS worker process", "definition": "Long-running process consuming the queue and executing registered jobs.", "tasks": 19 }, { "system": "AWS SQS queue", "definition": "Message queue backing all async jobs (Localstack in dev).", "tasks": 11 } ] }, { "tag": "Dev-Infra-Testing", "facet": "Surface", "definition": "Deploy/infra (k8s, Terraform, k6 load) and the Playwright E2E harness.", "vendors": [], "tasks": 19, "systems": [ { "system": "Infra / deploy / load testing", "definition": "k8s manifests, Atmos/Terraform stacks, k6 load scripts, autopatch scripts.", "tasks": 18 }, { "system": "E2E test harness", "definition": "Playwright end-to-end suite with its own env fixtures.", "tasks": 3 } ] }, { "tag": "Mobile-App", "facet": "Surface", "definition": "The native mobile client \u2014 Palolo's Swift iOS WebView wrapper + native Plaid LinkController.", "vendors": [], "tasks": 6, "systems": [ { "system": "iOS native wrapper", "definition": "Swift app wrapping the web client in a WebView + native Plaid LinkController.", "tasks": 6 } ] } ] }, { "repo": "ZenBill", "tasks": 138, "tags": [ { "tag": "Card-Payments", "facet": "Integration", "definition": "Credit-card collections \u2014 identities, merchants, payment instruments, card transfers. Via Finix.", "vendors": [ "Finix", "Stripe", "Pay" ], "tasks": 21, "systems": [ { "system": "Finix credit-card", "definition": "Credit-card collections (identities, merchants, payment instruments, card transfers).", "tasks": 21 } ] }, { "tag": "Email-Delivery", "facet": "Integration", "definition": "Outbound transactional email \u2014 Palolo SendGrid dispatch; ZenBill Rails ActionMailer layer.", "vendors": [ "SendGrid (Palolo)", "ActionMailer (ZenBill)", "ActionMailer", "Postmark", "Mailgun", "Mandrill" ], "tasks": 19, "systems": [ { "system": "Mailers", "definition": "Transactional email across every domain (Rails mailer layer; provider-agnostic).", "tasks": 19 } ] }, { "tag": "ACH-Payments", "facet": "Integration", "definition": "The ACH bank-to-bank money-movement rail (execution + webhook reconciliation). Via Dwolla.", "vendors": [ "Dwolla" ], "tasks": 14, "systems": [ { "system": "Dwolla ACH", "definition": "ACH bank-to-bank money movement (core rail); transfer execution + webhook reconciliation.", "tasks": 14 } ] }, { "tag": "Accounting-Sync", "facet": "Integration", "definition": "Two-way accounting sync (vendors, customers, GL, bills, payments) + OAuth lifecycle. Via QuickBooks Online.", "vendors": [ "QuickBooks Online" ], "tasks": 9, "systems": [ { "system": "QuickBooks Online sync", "definition": "Two-way accounting sync (vendors, customers, GL categories, banks, bills, payments) + OAuth lifecycle.", "tasks": 9 } ] }, { "tag": "Bank-Account-Linking", "facet": "Integration", "definition": "Linking & verifying external bank accounts (processor tokens, balances). Via Plaid.", "vendors": [ "Plaid" ], "tasks": 5, "systems": [ { "system": "Plaid bank-linking", "definition": "Bank-account linking + verification; issues processor tokens consumed by Dwolla.", "tasks": 5 } ] }, { "tag": "Document-OCR", "facet": "Integration", "definition": "OCR extraction of header fields + line items from uploaded/emailed documents. Via base64.ai.", "vendors": [ "base64.ai" ], "tasks": 3, "systems": [ { "system": "Base64.ai OCR", "definition": "Invoice OCR: extract header fields + line items from uploaded/emailed documents.", "tasks": 3 } ] }, { "tag": "SMS-Delivery", "facet": "Integration", "definition": "Outbound SMS for phone verification / 2FA. Via Twilio.", "vendors": [ "Twilio", "Short.io" ], "tasks": 3, "systems": [ { "system": "Twilio OTP SMS", "definition": "SMS delivery for two-factor / phone verification.", "tasks": 3 } ] }, { "tag": "Subscription-Billing", "facet": "Integration", "definition": "The product's OWN premium/subscription billing (not customer money movement). Via Stripe.", "vendors": [ "Stripe" ], "tasks": 2, "systems": [ { "system": "Stripe subscriptions", "definition": "ZenBill's OWN premium/subscription billing (not customer money movement).", "tasks": 2 } ] }, { "tag": "Money-Transfers", "facet": "Domain", "definition": "Money-movement lifecycle: the Transfer state machine, polymorphic funding sources, recurring/scheduled, collections/AR, approvals, paper-check.", "vendors": [], "tasks": 88, "systems": [ { "system": "Transfers core (AASM state machine)", "definition": "Transfer = inbound(request)/outbound(payment) with rich AASM approval\u2192schedule\u2192send\u2192settle lifecycle.", "tasks": 74 }, { "system": "Recurring / scheduled transfers", "definition": "Repeat transfers expanded into dated children; date-driven scheduling of one-offs.", "tasks": 26 }, { "system": "Collections / AR", "definition": "Inbound 'requests' (money-in): accept/reject a collection, send reminders.", "tasks": 20 }, { "system": "Approvals", "definition": "Single-step payout approval gate (approve/deny), tied to role/named-approver.", "tasks": 19 }, { "system": "Funding sources / routing", "definition": "Polymorphic funding sources (bank, card, paper check) + default inbound/outbound routing + counterpart matching.", "tasks": 15 }, { "system": "Paper-check disbursement", "definition": "Mailed paper check as a funding source + admin settlement.", "tasks": 4 } ] }, { "tag": "Contacts-Onboarding", "facet": "Domain", "definition": "Vendors/customers (recipients) management + the tokenized counterparty self-onboarding portal.", "vendors": [], "tasks": 31, "systems": [ { "system": "Contact / recipient management", "definition": "Vendors/customers CRUD, soft-delete, default funding sources, QBO-vendor linkage.", "tasks": 23 }, { "system": "Contact onboarding portal", "definition": "Separate authed portal for a counterparty to self-onboard (connect bank, submit W-9) via tokenized link.", "tasks": 11 } ] }, { "tag": "Organizations-Admin", "facet": "Domain", "definition": "Org/multi-tenancy setup, members/roles/invites, per-org config & feature flags, admin/impersonation/audit, activity feed.", "vendors": [], "tasks": 29, "systems": [ { "system": "Organizations / multi-tenancy", "definition": "Tenant boundary: org + user membership, setup, per-org config (premium, timezone, custom_url).", "tasks": 19 }, { "system": "Admin / impersonation / audit", "definition": "Internal admin: user impersonation, org approval/rejection, activity audit feed, manual check settlement.", "tasks": 12 } ] }, { "tag": "Authorization-Permissions", "facet": "Domain", "definition": "Role/capability-based access control (abilities keyed off org membership).", "vendors": [ "Pundit" ], "tasks": 26, "systems": [ { "system": "Authorization / RBAC", "definition": "CanCan ability rules keyed off users_organization capability flags.", "tasks": 26 } ] }, { "tag": "Webhooks-Idempotency", "facet": "Domain", "definition": "Inbound provider-webhook ingestion (verification, dedup, async processing) + idempotency keys for retry-safe money moves.", "vendors": [], "tasks": 21, "systems": [ { "system": "Idempotency / financial safety", "definition": "Idempotency keys with recovery-points making money-moving requests safe to retry.", "tasks": 16 }, { "system": "Webhook ingestion / event processing", "definition": "Inbound provider webhooks persisted as event rows, then processed async & idempotently (dedup on event_id).", "tasks": 6 } ] }, { "tag": "Invoicing-Billing", "facet": "Domain", "definition": "Invoice + line-item lifecycle (create/send/receive/pay) and the inbound-email invoice inbox.", "vendors": [], "tasks": 18, "systems": [ { "system": "Invoicing / billing", "definition": "Invoices + line items: create/send, receive, draft\u2192ready\u2192paid, link to a transfer, archive.", "tasks": 18 }, { "system": "Invoice inbox (inbound email \u2192 OCR)", "definition": "Per-org email address receives invoices; Action Mailbox routes + OCR-parses attachments w/ dedup.", "tasks": 6 } ] }, { "tag": "Auth-Sessions", "facet": "Domain", "definition": "Login, password hashing/reset, email verification, server-side session management.", "vendors": [ "Devise", "Google OAuth2" ], "tasks": 11, "systems": [ { "system": "Auth / sessions", "definition": "Login, password reset, email verification, server-side session records + active-session tracking.", "tasks": 11 } ] }, { "tag": "KYC-Compliance", "facet": "Domain", "definition": "Identity/business verification (KYC/KYB) incl. beneficial owners, ID documents, onboarding address autocomplete.", "vendors": [], "tasks": 7, "systems": [ { "system": "KYC / KYB verification", "definition": "Business-identity + beneficial-owner verification with uploaded ID documents.", "tasks": 7 }, { "system": "Google Maps autocomplete", "definition": "Address autocomplete during KYC/onboarding.", "tasks": 0 } ] }, { "tag": "Tax-Forms", "facet": "Domain", "definition": "Contractor tax-form collection (W-9: tax classification, encrypted EIN/SSN) \u2014 distinct from KYC.", "vendors": [], "tasks": 4, "systems": [ { "system": "W-9 / tax forms", "definition": "Collect contractor W-9 (name, tax classification, encrypted EIN/SSN) per contact.", "tasks": 4 } ] }, { "tag": "MFA-OTP", "facet": "Domain", "definition": "Second-factor auth \u2014 TOTP + SMS OTP, verification tokens, enable/toggle/disable.", "vendors": [], "tasks": 3, "systems": [ { "system": "OTP / 2FA", "definition": "TOTP + SMS second factor (provisioning URI, enable/toggle, validate).", "tasks": 3 } ] }, { "tag": "Notifications-Messaging", "facet": "Domain", "definition": "Member-facing notification pipeline (enqueue->channel->dispatch), reminders, SSR email templates, internal Slack alerts, support chat.", "vendors": [ "Slack (internal alerts)", "Zendesk", "Intercom", "Noticed" ], "tasks": 1, "systems": [ { "system": "Intercom support", "definition": "Customer-support / engagement sync (org attrs pushed to Intercom) + frontend widget.", "tasks": 1 } ] }, { "tag": "Backend-Architecture", "facet": "Surface", "definition": "Request/API framework & business-logic layering \u2014 Express typed endpoints + rate limiting; Rails multi-audience API + ActiveInteraction service objects.", "vendors": [], "tasks": 58, "systems": [ { "system": "Interactions layer (service objects)", "definition": "active_interaction command objects encapsulating business operations (validation + orchestration).", "tasks": 33 }, { "system": "Rails REST API (3 audiences)", "definition": "Subdomain-routed JSON APIs: public api/v1, session-authed internal/v1, token-authed internal_contacts/v1.", "tasks": 31 } ] }, { "tag": "Web-Frontend", "facet": "Surface", "definition": "The browser SPAs \u2014 Palolo Preact (app + HQ) and ZenBill React (dashboard + onboarding) incl. the design system.", "vendors": [], "tasks": 21, "systems": [ { "system": "React SPA (dash + onboarding)", "definition": "TS React app served per-subdomain via Webpacker; atom-based store, HOCs, design system.", "tasks": 21 }, { "system": "Design system (azulejos)", "definition": "In-repo component/design-system library.", "tasks": 0 } ] }, { "tag": "Background-Jobs", "facet": "Surface", "definition": "Async job processing \u2014 Palolo SQS worker + job registry; ZenBill Delayed Job.", "vendors": [], "tasks": 21, "systems": [ { "system": "Background jobs (Delayed Job)", "definition": "Async work: webhook processing, external syncs, scheduled/recurring transfers, session cleanup, reminders.", "tasks": 21 } ] }, { "tag": "Data-Layer-Schema", "facet": "Surface", "definition": "Persistence & schema \u2014 Prisma data layer + codegen + shared Zod contracts (Palolo); ActiveRecord concerns + field encryption (ZenBill).", "vendors": [], "tasks": 16, "systems": [ { "system": "ActiveRecord data layer + concerns", "definition": "Shared model behaviors: soft-delete, full-text search (pg_search), auditing, polymorphic owners, PII stripping.", "tasks": 11 }, { "system": "PII encryption at rest", "definition": "Symmetric encrypt/sign of sensitive fields (SSN, EIN) via ActiveSupport::MessageEncryptor.", "tasks": 6 } ] } ] }, { "repo": "Zeta Platform", "tasks": 104, "tags": [ { "tag": "Bank-Account-Linking", "facet": "Integration", "definition": "Linking & verifying external bank accounts (processor tokens, balances). Via Plaid.", "vendors": [ "Plaid" ], "tasks": 17, "systems": [ { "system": "Plaid (bank linking)", "definition": "Link external accounts; auth/balances/txns/liabilities.", "tasks": 17 } ] }, { "tag": "Email-Delivery", "facet": "Integration", "definition": "Outbound transactional email \u2014 Palolo SendGrid dispatch; ZenBill Rails ActionMailer layer.", "vendors": [ "SendGrid (Palolo)", "ActionMailer (ZenBill)", "ActionMailer", "Postmark", "Mailgun", "Mandrill" ], "tasks": 3, "systems": [ { "system": "Email delivery/inbound (Mailgun/Mandrill)", "definition": "Outbound + inbound-email webhook parsing.", "tasks": 3 } ] }, { "tag": "Push-Delivery", "facet": "Integration", "definition": "Mobile push transport via Expo and Firebase Cloud Messaging.", "vendors": [ "Expo", "FCM" ], "tasks": 3, "systems": [ { "system": "Push delivery (Expo/FCM)", "definition": "Mobile push transport (Expo + Firebase).", "tasks": 3 } ] }, { "tag": "SMS-Delivery", "facet": "Integration", "definition": "Outbound SMS for phone verification / 2FA. Via Twilio.", "vendors": [ "Twilio", "Short.io" ], "tasks": 1, "systems": [ { "system": "Twilio (SMS)", "definition": "SMS for 2FA, invites, app links.", "tasks": 1 } ] }, { "tag": "Monitoring-Analytics", "facet": "Integration", "definition": "Observability & product analytics \u2014 APM/metrics + event tracking. Via New Relic + Mixpanel.", "vendors": [ "New Relic", "Mixpanel", "Ahoy", "Blazer", "PgHero", "Flipper", "Sentry", "Slack" ], "tasks": 0, "systems": [ { "system": "Slack (ops alerts)", "definition": "ENV-gated internal Slack ops/canary alerts.", "tasks": 0 } ] }, { "tag": "Banking-Rails", "facet": "Integration", "definition": "Money-movement and BaaS-ledger banking rails: ACH/card-to-card transfers and bank-as-a-service ledger/vault issuance.", "vendors": [ "Astra", "Treasury Prime" ], "tasks": 0, "systems": [ { "system": "Astra (money-movement)", "definition": "3rd-party ACH card-to-card/account transfers, auth, chargebacks.", "tasks": 0 }, { "system": "Treasury Prime (BaaS ledger)", "definition": "Bank-as-a-service ledger/vault issuer + check creation.", "tasks": 0 } ] }, { "tag": "Identity-Verification-Vendor", "facet": "Integration", "definition": "External identity-decisioning vendor feeding KYC.", "vendors": [ "Alloy" ], "tasks": 0, "systems": [ { "system": "Alloy (identity/KYC vendor)", "definition": "External identity decisioning integrated into KYC.", "tasks": 0 } ] }, { "tag": "Tax-Filing-Vendor", "facet": "Integration", "definition": "Embedded 3rd-party tax-prep/filing provider.", "vendors": [ "April" ], "tasks": 0, "systems": [ { "system": "April (tax filing)", "definition": "Embedded tax-prep/filing integration.", "tasks": 0 } ] }, { "tag": "Notifications-Messaging", "facet": "Domain", "definition": "Member-facing notification pipeline (enqueue->channel->dispatch), reminders, SSR email templates, internal Slack alerts, support chat.", "vendors": [ "Slack (internal alerts)", "Zendesk", "Intercom", "Noticed" ], "tasks": 10, "systems": [ { "system": "Push notifications & alerts", "definition": "Compose/roll-up push notifications and in-app alerts.", "tasks": 7 }, { "system": "ActionMailer + views", "definition": "Transactional/member email across ~30 mailers.", "tasks": 4 }, { "system": "Realtime channels/sockets", "definition": "ActionCable + Pusher push transport.", "tasks": 0 } ] }, { "tag": "Card-Transactions", "facet": "Domain", "definition": "Ingest card-auth events and apply configurable spend rules, declines, and tokenization to card transactions.", "vendors": [], "tasks": 10, "systems": [ { "system": "Spending/transaction rules engine", "definition": "Match and apply configurable rules to card transactions.", "tasks": 10 }, { "system": "Card events & decline processing", "definition": "Ingest card-auth events, assign to txns, handle declines/tokenization.", "tasks": 1 } ] }, { "tag": "Subscriptions", "facet": "Domain", "definition": "Paid membership (Zeta Plus): create/charge/plan-change/refunds and feature gating.", "vendors": [], "tasks": 10, "systems": [ { "system": "Subscriptions / Zeta Plus", "definition": "Paid membership billing and feature gating.", "tasks": 10 } ] }, { "tag": "Money-Transfers", "facet": "Domain", "definition": "Money-movement lifecycle: the Transfer state machine, polymorphic funding sources, recurring/scheduled, collections/AR, approvals, paper-check.", "vendors": [], "tasks": 9, "systems": [ { "system": "Money movement / transfers", "definition": "Central transfer lifecycle orchestration.", "tasks": 9 } ] }, { "tag": "Savings-Automations", "facet": "Domain", "definition": "Auto-generate, suggest, and run rule-driven savings automations (Automation Plus).", "vendors": [], "tasks": 7, "systems": [ { "system": "Savings automations (Automation Plus)", "definition": "Rule-driven auto-savings generation and execution.", "tasks": 7 } ] }, { "tag": "Bill-Pay", "facet": "Domain", "definition": "Bills, counterparties, and scheduled bill payments.", "vendors": [], "tasks": 7, "systems": [ { "system": "Bill pay", "definition": "Bills & counterparties with scheduled payments.", "tasks": 7 } ] }, { "tag": "Webhooks-Idempotency", "facet": "Domain", "definition": "Inbound provider-webhook ingestion (verification, dedup, async processing) + idempotency keys for retry-safe money moves.", "vendors": [], "tasks": 6, "systems": [ { "system": "Webhook ingestion", "definition": "Inbound provider callbacks routed to per-vendor handlers.", "tasks": 6 } ] }, { "tag": "KYC-Compliance", "facet": "Domain", "definition": "Identity/business verification (KYC/KYB) incl. beneficial owners, ID documents, onboarding address autocomplete.", "vendors": [], "tasks": 3, "systems": [ { "system": "KYC / onboarding", "definition": "Identity verification, deny-list, manual review, account applications.", "tasks": 3 } ] }, { "tag": "Cards-Issuance", "facet": "Domain", "definition": "Issue, terminate, update, and gate eligibility for physical and virtual cards.", "vendors": [], "tasks": 3, "systems": [ { "system": "Card issuance & lifecycle", "definition": "Card issuing, termination, updates, and eligibility.", "tasks": 3 } ] }, { "tag": "Statements-Tax", "facet": "Domain", "definition": "Account statements and 1099/tax document generation and filing.", "vendors": [], "tasks": 3, "systems": [ { "system": "Statements & tax documents", "definition": "Account statements plus 1099/tax filings.", "tasks": 3 } ] }, { "tag": "ACH-Processing", "facet": "Domain", "definition": "ACH-specific transfer handling plus inbound-ACH ingestion, identity matching, and direct-deposit detection.", "vendors": [], "tasks": 2, "systems": [ { "system": "Incoming ACH & paycheck detection", "definition": "Ingest inbound ACH credits, match identity, detect direct-deposit.", "tasks": 2 }, { "system": "ACH money movement", "definition": "ACH-specific transfer handlers (internal + external book).", "tasks": 0 } ] }, { "tag": "Risk-Fraud", "facet": "Domain", "definition": "Transaction/transfer risk scoring, member/ACH risk scoring, counterparty blacklists, and sanctions.", "vendors": [], "tasks": 0, "systems": [ { "system": "Fraud & transaction risk", "definition": "Txn/transfer risk, counterparty blacklist, sanctions.", "tasks": 0 }, { "system": "ACH/user risk scoring", "definition": "Score inbound ACH and members for risk.", "tasks": 0 } ] }, { "tag": "Check-Deposits", "facet": "Domain", "definition": "Mobile check-deposit capture, deposit, disbursement, and resubmission.", "vendors": [], "tasks": 0, "systems": [ { "system": "Check deposits", "definition": "Mobile check-deposit capture/deposit/disbursement/resubmit.", "tasks": 0 } ] }, { "tag": "API-Layer", "facet": "Surface", "definition": "Versioned JSON API namespace (mobile sign-in) documented via Rswag/OpenAPI.", "vendors": [], "tasks": 42, "systems": [ { "system": "GraphQL API layer", "definition": "~155 mutations, ~202 types, resolvers/subscriptions serving the main client API.", "tasks": 42 } ] }, { "tag": "Background-Jobs", "facet": "Surface", "definition": "Async job processing \u2014 Palolo SQS worker + job registry; ZenBill Delayed Job.", "vendors": [], "tasks": 27, "systems": [ { "system": "Sidekiq background jobs", "definition": "Async job layer for cross-domain processing.", "tasks": 27 } ] }, { "tag": "Admin-Console", "facet": "Surface", "definition": "Internal admin back-office UI \u2014 admin home, analytics charts, and Blazer SQL dashboards.", "vendors": [], "tasks": 9, "systems": [ { "system": "Admin console", "definition": "Server-rendered admin controllers/routes for ops.", "tasks": 9 } ] }, { "tag": "Secrets-Vault", "facet": "Surface", "definition": "Adapter layer wrapping card-data vault and BaaS ledger access behind a uniform interface.", "vendors": [], "tasks": 1, "systems": [ { "system": "Vault/secrets abstraction", "definition": "Client/adapter/interface layer over card vault + ledger.", "tasks": 1 } ] } ] }, { "repo": "Zeta (polyglot)", "tasks": 41, "tags": [ { "tag": "Bank-Account-Linking", "facet": "Integration", "definition": "Linking & verifying external bank accounts (processor tokens, balances). Via Plaid.", "vendors": [ "Plaid" ], "tasks": 7, "systems": [ { "system": "Bank-account aggregation (Plaid)", "definition": "Plaid linking + balances/identity/transactions across backend, the PX Exchange contract, and the mobile SDK.", "tasks": 7 } ] }, { "tag": "Banking-Rails", "facet": "Integration", "definition": "Money-movement and BaaS-ledger banking rails: ACH/card-to-card transfers and bank-as-a-service ledger/vault issuance.", "vendors": [ "Astra", "Treasury Prime" ], "tasks": 5, "systems": [ { "system": "Core-banking ledger (HiddenTemple/Vault, Treasury Prime)", "definition": "HTTP clients wrapping external core-banking/ledger + bank-of-record platforms (accounts, ACH, checks, cards, books).", "tasks": 5 } ] }, { "tag": "Monitoring-Analytics", "facet": "Integration", "definition": "Observability & product analytics \u2014 APM/metrics + event tracking. Via New Relic + Mixpanel.", "vendors": [ "New Relic", "Mixpanel", "Ahoy", "Blazer", "PgHero", "Flipper", "Sentry", "Slack" ], "tasks": 3, "systems": [ { "system": "Monitoring & analytics vendors", "definition": "Sentry, New Relic, Mixpanel, Mailchimp, PagerDuty, and Slack notifications wired across services.", "tasks": 3 } ] }, { "tag": "Email-Delivery", "facet": "Integration", "definition": "Outbound transactional email \u2014 Palolo SendGrid dispatch; ZenBill Rails ActionMailer layer.", "vendors": [ "SendGrid (Palolo)", "ActionMailer (ZenBill)", "ActionMailer", "Postmark", "Mailgun", "Mandrill" ], "tasks": 2, "systems": [ { "system": "Email delivery & templating", "definition": "Transactional email via ActionMailer with Inky/Premailer templating across many mailer types.", "tasks": 2 } ] }, { "tag": "LLM-Provider", "facet": "Integration", "definition": "Large-language-model provider integration: chat/completion, structured output, and agent frameworks.", "vendors": [ "OpenAI", "Anthropic (Claude)", "LangChain/LangGraph" ], "tasks": 2, "systems": [ { "system": "LLM provider (OpenAI/LangChain/LangGraph)", "definition": "ChatOpenAI (GPT-4o) model calls via LangChain/LangGraph powering the CX chatbot and agent tools.", "tasks": 2 } ] }, { "tag": "Card-Payments", "facet": "Integration", "definition": "Credit-card collections \u2014 identities, merchants, payment instruments, card transfers. Via Finix.", "vendors": [ "Finix", "Stripe", "Pay" ], "tasks": 0, "systems": [ { "system": "Card-issuing processor (Astra)", "definition": "External card-processor client: card issuance, authorization, chargebacks and transfers.", "tasks": 0 } ] }, { "tag": "SMS-Delivery", "facet": "Integration", "definition": "Outbound SMS for phone verification / 2FA. Via Twilio.", "vendors": [ "Twilio", "Short.io" ], "tasks": 0, "systems": [ { "system": "SMS delivery (Twilio)", "definition": "Outbound SMS for invitations, app links, and 2FA codes.", "tasks": 0 } ] }, { "tag": "Cloud-Storage-Secrets", "facet": "Integration", "definition": "Cloud object storage + runtime secret fetching. Via AWS.", "vendors": [ "AWS S3", "AWS Secrets Manager" ], "tasks": 0, "systems": [ { "system": "Document storage (Box)", "definition": "Backfill/download of files and conversations to/from Box cloud storage.", "tasks": 0 } ] }, { "tag": "Identity-Verification-Vendor", "facet": "Integration", "definition": "External identity-decisioning vendor feeding KYC.", "vendors": [ "Alloy" ], "tasks": 0, "systems": [ { "system": "KYC / identity verification (Alloy)", "definition": "Identity-verification vendor sync, deny-list checks, and manual-review onboarding workflow.", "tasks": 0 } ] }, { "tag": "Tax-Filing-Vendor", "facet": "Integration", "definition": "Embedded 3rd-party tax-prep/filing provider.", "vendors": [ "April" ], "tasks": 0, "systems": [ { "system": "Tax-filing integration (April)", "definition": "Embedded April SSO tax-filing SDK (mobile) plus tax-document generation/distribution.", "tasks": 0 } ] }, { "tag": "Push-Delivery", "facet": "Integration", "definition": "Mobile push transport via Expo and Firebase Cloud Messaging.", "vendors": [ "Expo", "FCM" ], "tasks": 0, "systems": [ { "system": "Push notifications (Expo/FCM/Firebase)", "definition": "Mobile push delivery via Expo server SDK, Firebase Cloud Messaging, and the RN messaging client.", "tasks": 0 } ] }, { "tag": "Data-Warehouse", "facet": "Integration", "definition": "Direct data-warehouse SQL access and bronze/dbt-style extraction feeding analytics and ML.", "vendors": [ "Postgres warehouse", "dbt" ], "tasks": 0, "systems": [ { "system": "Data-warehouse SQL access", "definition": "Direct psycopg2 Postgres warehouse access + bronze SQL/dbt-style extraction feeding analytics and ML.", "tasks": 0 } ] }, { "tag": "Auth-Sessions", "facet": "Domain", "definition": "Login, password hashing/reset, email verification, server-side session management.", "vendors": [ "Devise", "Google OAuth2" ], "tasks": 9, "systems": [ { "system": "Auth & identity (Heimdall JWT, Devise)", "definition": "JWT issuance/verification (Heimdall), Devise login, bearer auth, user/identity mgmt and API-client credentialing across services.", "tasks": 9 } ] }, { "tag": "Accounts-Cards", "facet": "Domain", "definition": "Checking accounts, card issuance/state/statements, and merchant-category (MCC) classification.", "vendors": [], "tasks": 8, "systems": [ { "system": "Accounts, households & onboarding", "definition": "Linked accounts, joint households/ownership, teams, and person/account onboarding applications.", "tasks": 8 } ] }, { "tag": "Conversational-AI", "facet": "Domain", "definition": "LLM chatbot orchestration: per-message workflow, prompt/config versioning, and pre/post-response guardrails.", "vendors": [], "tasks": 7, "systems": [ { "system": "CX chatbot orchestration & guardrails", "definition": "Per-message chatbot workflow: history, pre/post-response locking guardrails, webhook delivery, and race-condition ordering guards.", "tasks": 7 }, { "system": "Versioned prompt/config library", "definition": "Versioned planner/joiner prompt assets plus config-driven, versioned chatbot behavior.", "tasks": 0 } ] }, { "tag": "Money-Transfers", "facet": "Domain", "definition": "Money-movement lifecycle: the Transfer state machine, polymorphic funding sources, recurring/scheduled, collections/AR, approvals, paper-check.", "vendors": [], "tasks": 6, "systems": [ { "system": "Money transfers", "definition": "ACH, recurring, internal and deferred transfers plus pay-someone flows.", "tasks": 6 } ] }, { "tag": "Risk-Fraud", "facet": "Domain", "definition": "Transaction/transfer risk scoring, member/ACH risk scoring, counterparty blacklists, and sanctions.", "vendors": [], "tasks": 5, "systems": [ { "system": "Fraud & risk", "definition": "Fraud-signal evaluation, risk scoring, and account-limit enforcement.", "tasks": 5 } ] }, { "tag": "LLM-Agent-Tools", "facet": "Domain", "definition": "Agent-callable tools an LLM invokes (ledger/KB/account lookups, text-to-SQL) with safety guardrails.", "vendors": [], "tasks": 5, "systems": [ { "system": "LLM agent-callable tools", "definition": "LangChain BaseTool/StructuredTool functions (bill/goal ledgers, KB search, account info, automations reporting) an LLM agent invokes.", "tasks": 5 }, { "system": "Text-to-SQL with safety guardrail", "definition": "Natural-language\u2192SQL tool that runs a destructive-statement/keyword + LLM safety check before executing against Postgres.", "tasks": 1 } ] }, { "tag": "Cards-Issuance", "facet": "Domain", "definition": "Issue, terminate, update, and gate eligibility for physical and virtual cards.", "vendors": [], "tasks": 4, "systems": [ { "system": "Card lifecycle & reveal", "definition": "Card lifecycle/products, companion-card access rules, and device-bound (DUUID) sensitive-data reveal.", "tasks": 4 } ] }, { "tag": "Webhooks-Idempotency", "facet": "Domain", "definition": "Inbound provider-webhook ingestion (verification, dedup, async processing) + idempotency keys for retry-safe money moves.", "vendors": [], "tasks": 3, "systems": [ { "system": "Webhook & event-stream ingestion", "definition": "Inbound/outbound webhook receipt with async processing plus Karafka/Kafka event-stream consumers.", "tasks": 3 } ] }, { "tag": "Savings-Automations", "facet": "Domain", "definition": "Auto-generate, suggest, and run rule-driven savings automations (Automation Plus).", "vendors": [], "tasks": 2, "systems": [ { "system": "Automations & savings rules engine", "definition": "User-defined automation rules/instances driving scheduled transfers, disbursements, goals and savings.", "tasks": 2 } ] }, { "tag": "Card-Transactions", "facet": "Domain", "definition": "Ingest card-auth events and apply configurable spend rules, declines, and tokenization to card transactions.", "vendors": [], "tasks": 1, "systems": [ { "system": "Card transactions & events", "definition": "Card-event processing, chargebacks, and declined-authorization handling.", "tasks": 1 } ] }, { "tag": "Subscriptions", "facet": "Domain", "definition": "Paid membership (Zeta Plus): create/charge/plan-change/refunds and feature gating.", "vendors": [], "tasks": 1, "systems": [ { "system": "Subscriptions & tiers", "definition": "Premium-tier subscription management and invoice generation.", "tasks": 1 } ] }, { "tag": "Bill-Pay", "facet": "Domain", "definition": "Bills, counterparties, and scheduled bill payments.", "vendors": [], "tasks": 1, "systems": [ { "system": "Bill pay", "definition": "Bill payments, payees, and scheduling.", "tasks": 1 } ] }, { "tag": "Statements-Tax", "facet": "Domain", "definition": "Account statements and 1099/tax document generation and filing.", "vendors": [], "tasks": 1, "systems": [ { "system": "Statements & tax documents", "definition": "Statement and tax-document generation and distribution.", "tasks": 1 } ] }, { "tag": "ML-Modeling", "facet": "Domain", "definition": "Machine-learning modeling: feature engineering, sampling, and anomaly/fraud detection.", "vendors": [ "scikit-learn", "statsmodels", "Darts" ], "tasks": 1, "systems": [ { "system": "Transaction anomaly-detection modeling", "definition": "STL/ARIMA/Isolation-Forest anomaly-detection prototype plus fraud (R10/R16 closure-reason) labeling.", "tasks": 1 }, { "system": "ML feature engineering & sampling", "definition": "Feature engineering, stratified per-account sampling, and EDA notebooks over the transaction extract.", "tasks": 1 } ] }, { "tag": "Check-Deposits", "facet": "Domain", "definition": "Mobile check-deposit capture, deposit, disbursement, and resubmission.", "vendors": [], "tasks": 0, "systems": [ { "system": "Check deposits", "definition": "Mobile check-deposit capture and processing workflow.", "tasks": 0 } ] }, { "tag": "API-Layer", "facet": "Surface", "definition": "Versioned JSON API namespace (mobile sign-in) documented via Rswag/OpenAPI.", "vendors": [], "tasks": 10, "systems": [ { "system": "GraphQL + REST API layer", "definition": "GraphQL API (~200 types/mutations/resolvers) plus API-only REST services (e.g. the Plaid Exchange contract).", "tasks": 10 } ] }, { "tag": "Background-Jobs", "facet": "Surface", "definition": "Async job processing \u2014 Palolo SQS worker + job registry; ZenBill Delayed Job.", "vendors": [], "tasks": 9, "systems": [ { "system": "Async jobs, streaming & scheduling", "definition": "Sidekiq async jobs, Karafka/Kafka event streaming, and Clockwork scheduled processes.", "tasks": 9 } ] }, { "tag": "Dev-Infra-Testing", "facet": "Surface", "definition": "Deploy/infra (k8s, Terraform, k6 load) and the Playwright E2E harness.", "vendors": [], "tasks": 5, "systems": [ { "system": "Test suites (RSpec/Jest/E2E/LLM-judge)", "definition": "RSpec (~7000 ex), Jest, WDIO/Appium device E2E, and manual LLM-as-judge chatbot harnesses.", "tasks": 5 } ] }, { "tag": "Data-Layer-Schema", "facet": "Surface", "definition": "Persistence & schema \u2014 Prisma data layer + codegen + shared Zod contracts (Palolo); ActiveRecord concerns + field encryption (ZenBill).", "vendors": [], "tasks": 4, "systems": [ { "system": "Postgres + dual-database data layer", "definition": "Postgres with UUID PKs and a dual-database (primary + read-only source) read-model architecture.", "tasks": 4 } ] }, { "tag": "Mobile-App", "facet": "Surface", "definition": "The native mobile client \u2014 Palolo's Swift iOS WebView wrapper + native Plaid LinkController.", "vendors": [], "tasks": 3, "systems": [ { "system": "React Native mobile app", "definition": "RN app shell: React Navigation, easy-peasy global state, shared design system, and OTA (Hot Updater) updates.", "tasks": 3 } ] }, { "tag": "Secrets-Vault", "facet": "Surface", "definition": "Adapter layer wrapping card-data vault and BaaS ledger access behind a uniform interface.", "vendors": [], "tasks": 1, "systems": [ { "system": "Card-data tokenization (PCI)", "definition": "PAN/CVV tokenization (TokenID), at-rest encryption, and TTL-based cache clearing for sensitive card data.", "tasks": 1 } ] } ] }, { "repo": "Breezy", "tasks": 11, "tags": [ { "tag": "SMS-Delivery", "facet": "Integration", "definition": "Outbound SMS for phone verification / 2FA. Via Twilio.", "vendors": [ "Twilio", "Short.io" ], "tasks": 2, "systems": [ { "system": "SMS messaging (Twilio/Telnyx)", "definition": "Outbound/inbound SMS and message threading via Twilio and Telnyx.", "tasks": 2 } ] }, { "tag": "Subscription-Billing", "facet": "Integration", "definition": "The product's OWN premium/subscription billing (not customer money movement). Via Stripe.", "vendors": [ "Stripe" ], "tasks": 1, "systems": [ { "system": "Stripe billing", "definition": "Subscription plans, payment-processor profiles, and webhook-driven subscription lifecycle.", "tasks": 1 } ] }, { "tag": "Email-Delivery", "facet": "Integration", "definition": "Outbound transactional email \u2014 Palolo SendGrid dispatch; ZenBill Rails ActionMailer layer.", "vendors": [ "SendGrid (Palolo)", "ActionMailer (ZenBill)", "ActionMailer", "Postmark", "Mailgun", "Mandrill" ], "tasks": 1, "systems": [ { "system": "Email delivery (Mailgun/SendGrid/Nylas)", "definition": "Transactional email sending and inbound email routing across Mailgun, SendGrid and Nylas.", "tasks": 1 } ] }, { "tag": "Calendar-Sync", "facet": "Integration", "definition": "Calendar and mailbox sync via Google Workspace (watch subscriptions, push, OAuth).", "vendors": [ "Google Calendar", "Gmail" ], "tasks": 1, "systems": [ { "system": "Google Workspace (Calendar/Gmail)", "definition": "Google Calendar sync/watch subscriptions, Gmail push notifications, and OAuth.", "tasks": 1 } ] }, { "tag": "LLM-Provider", "facet": "Integration", "definition": "Large-language-model provider integration: chat/completion, structured output, and agent frameworks.", "vendors": [ "OpenAI", "Anthropic (Claude)", "LangChain/LangGraph" ], "tasks": 0, "systems": [ { "system": "LLM provider (OpenAI/Anthropic Claude)", "definition": "GPT + Claude completion, structured output, and Claude Agent SDK programmatic agent sessions.", "tasks": 0 } ] }, { "tag": "Telephony-Voice", "facet": "Integration", "definition": "Voice/telephony provider integration: calls, IVR, recording, SMS, and meeting-bot capture.", "vendors": [ "Twilio", "Vapi", "Telnyx", "Recall.ai" ], "tasks": 0, "systems": [ { "system": "Telephony & voice AI (Twilio/Vapi/Telnyx/Recall.ai)", "definition": "Inbound/outbound calls, IVR, recording and voice-agent handling plus meeting-bot capture across Twilio, Vapi, Telnyx and Recall.ai.", "tasks": 0 } ] }, { "tag": "Cloud-Infra", "facet": "Integration", "definition": "Cloud infrastructure provisioning/management (compute, DNS, CDN) for customer hosting.", "vendors": [ "AWS EC2/Fargate", "Route53", "CloudFront" ], "tasks": 0, "systems": [ { "system": "AWS infrastructure provisioning", "definition": "EC2/Fargate/ALB/CloudFront/Route53 provisioning for customer site hosting.", "tasks": 0 } ] }, { "tag": "Ad-Platforms", "facet": "Integration", "definition": "Advertising-platform integration: campaign sync and webhook verification.", "vendors": [ "Meta (Facebook/Instagram/WhatsApp)" ], "tasks": 0, "systems": [ { "system": "Meta ads & messaging", "definition": "Meta (Facebook/Instagram/WhatsApp) ad-campaign sync and webhook verification.", "tasks": 0 } ] }, { "tag": "Contacts-CRM", "facet": "Domain", "definition": "Contact/lead management: capture, segments, and notes linking interactions to a customer base.", "vendors": [], "tasks": 4, "systems": [ { "system": "Contacts & lead management", "definition": "Contacts, lead capture, segments and notes tying calls/chats to a professional's customer base.", "tasks": 4 } ] }, { "tag": "Auth-Sessions", "facet": "Domain", "definition": "Login, password hashing/reset, email verification, server-side session management.", "vendors": [ "Devise", "Google OAuth2" ], "tasks": 3, "systems": [ { "system": "Clerk authentication (offline bypass)", "definition": "Clerk JWT auth with an offline bypass mode that swaps in a mock signed-in user for self-contained runs.", "tasks": 3 } ] }, { "tag": "Payments-Ledger", "facet": "Domain", "definition": "Polymorphic-payer payment records with STI payment types, allocations, refunds, and discounts.", "vendors": [], "tasks": 3, "systems": [ { "system": "Payments & pro subscriptions", "definition": "Professional-level plan subscriptions, deposits, and contact payments.", "tasks": 3 } ] }, { "tag": "Scheduling-Appointments", "facet": "Domain", "definition": "Appointment scheduling and calendar-synced job/reminder lifecycle.", "vendors": [], "tasks": 3, "systems": [ { "system": "Scheduling & appointments", "definition": "Job scheduling, calendar-synced appointments, and deposit reminders.", "tasks": 3 } ] }, { "tag": "Call-Management", "facet": "Domain", "definition": "Phone-call lifecycle: forwarding verification, spam scoring, and number provisioning.", "vendors": [], "tasks": 1, "systems": [ { "system": "Call & phone-number management", "definition": "Phone calls, forwarding verification, spam scoring, and number provisioning.", "tasks": 1 } ] }, { "tag": "Receptionist-Agent-Config", "facet": "Domain", "definition": "Configurable AI-receptionist behavior: goals, conditional/custom rules, and prompt templates.", "vendors": [], "tasks": 1, "systems": [ { "system": "AI receptionist agent config", "definition": "Configurable receptionist behavior: goals, conditional/custom rules, and prompt templates.", "tasks": 1 } ] }, { "tag": "Transcription-Analysis", "facet": "Domain", "definition": "Call transcription and post-call conversation/summary analysis.", "vendors": [], "tasks": 1, "systems": [ { "system": "Transcription & conversation analysis", "definition": "Call transcription pipeline and post-call conversation/summary analysis feeding agent behavior.", "tasks": 1 } ] }, { "tag": "Webhooks-Idempotency", "facet": "Domain", "definition": "Inbound provider-webhook ingestion (verification, dedup, async processing) + idempotency keys for retry-safe money moves.", "vendors": [], "tasks": 0, "systems": [ { "system": "Provider webhook ingestion", "definition": "Inbound webhook endpoints for Twilio/Stripe/Meta/Google/Telnyx/Mailgun events.", "tasks": 0 } ] }, { "tag": "Marketing-Automation", "facet": "Domain", "definition": "Automation definitions/runs plus outreach campaigns and drip/follow-up sequencing.", "vendors": [], "tasks": 0, "systems": [ { "system": "Automations & marketing campaigns", "definition": "Automation definitions/runs plus outreach/ad campaigns and drip/follow-up sequencing.", "tasks": 0 } ] }, { "tag": "Site-Builder", "facet": "Domain", "definition": "DIY customer-website generation/deployment plus web-audit/SEO tooling.", "vendors": [ "Firecrawl" ], "tasks": 0, "systems": [ { "system": "DIY site builder & web audit", "definition": "Customer-facing website generation/deployment (domains, site deploys) plus Firecrawl SEO/website-audit tooling.", "tasks": 0 } ] }, { "tag": "Backend-Architecture", "facet": "Surface", "definition": "Request/API framework & business-logic layering \u2014 Express typed endpoints + rate limiting; Rails multi-audience API + ActiveInteraction service objects.", "vendors": [], "tasks": 7, "systems": [ { "system": "Rails API (Bullet Train)", "definition": "Rails 7 API on Bullet Train scaffolding: model/controller/job namespacing, REST + webhook routing, ActionCable realtime.", "tasks": 7 } ] }, { "tag": "Data-Layer-Schema", "facet": "Surface", "definition": "Persistence & schema \u2014 Prisma data layer + codegen + shared Zod contracts (Palolo); ActiveRecord concerns + field encryption (ZenBill).", "vendors": [], "tasks": 5, "systems": [ { "system": "Postgres data layer (100+ tables)", "definition": "Large relational ActiveRecord/Postgres schema for calls, contacts, agent configs, ads and payments.", "tasks": 5 } ] }, { "tag": "Web-Frontend", "facet": "Surface", "definition": "The browser SPAs \u2014 Palolo Preact (app + HQ) and ZenBill React (dashboard + onboarding) incl. the design system.", "vendors": [], "tasks": 2, "systems": [ { "system": "Next.js 14 frontend", "definition": "App-router Next.js UI (marketing site, app dashboard, embeddable widgets) with a typed backend API client.", "tasks": 2 } ] }, { "tag": "Background-Jobs", "facet": "Surface", "definition": "Async job processing \u2014 Palolo SQS worker + job registry; ZenBill Delayed Job.", "vendors": [], "tasks": 2, "systems": [ { "system": "Background jobs (Sidekiq)", "definition": "Sidekiq + sidekiq-scheduler async jobs, cleanup sweeps and scheduled crons.", "tasks": 2 } ] }, { "tag": "Dev-Infra-Testing", "facet": "Surface", "definition": "Deploy/infra (k8s, Terraform, k6 load) and the Playwright E2E harness.", "vendors": [], "tasks": 1, "systems": [ { "system": "RSpec test suite", "definition": "RSpec suite of record: model/controller/service specs plus factories/fixtures as the verifier.", "tasks": 1 } ] } ] }, { "repo": "Human Essentials", "tasks": 14, "tags": [ { "tag": "Feature-Flags", "facet": "Integration", "definition": "Runtime feature gating with a mounted management UI via Flipper.", "vendors": [ "Flipper" ], "tasks": 1, "systems": [ { "system": "Feature flags", "definition": "Runtime gating via Flipper (mounted UI).", "tasks": 1 } ] }, { "tag": "Geocoding", "facet": "Integration", "definition": "Address geocoding over polymorphic addresses via Geocoder and MaxMind GeoIP2.", "vendors": [ "Geocoder", "MaxMind" ], "tasks": 0, "systems": [ { "system": "Geocoding integration", "definition": "Address geocoding via geocoder gem.", "tasks": 0 } ] }, { "tag": "Inventory-Ledger", "facet": "Domain", "definition": "Event-sourced inventory core: Event STI records folded by InventoryAggregate into per-location on-hand, checkpointed by SnapshotEvents.", "vendors": [], "tasks": 7, "systems": [ { "system": "Inventory event-sourcing engine", "definition": "Event STI folded by InventoryAggregate into per-location on-hand; SnapshotEvents checkpoint.", "tasks": 7 } ] }, { "tag": "Distributions", "facet": "Domain", "definition": "Issuing inventory to partners with itemized breakdowns, totals, and scheduling.", "vendors": [], "tasks": 6, "systems": [ { "system": "Distributions", "definition": "Issue inventory to partners; itemized breakdowns, totals, scheduling.", "tasks": 6 } ] }, { "tag": "Reporting", "facet": "Domain", "definition": "Aggregate domain reports (case-contact, followup, missing-data, mileage) rendered as CSV.", "vendors": [], "tasks": 4, "systems": [ { "system": "Reports & annual reporting", "definition": "Aggregated program reports (diaper/incontinence/period/warehouse/annual).", "tasks": 3 }, { "system": "Historical trends & dashboard", "definition": "Cached time-series trends + org dashboard.", "tasks": 1 } ] }, { "tag": "Donations", "facet": "Domain", "definition": "Intake of donated inventory from sites, drives, and manufacturers, including community product drives and their rollups.", "vendors": [], "tasks": 3, "systems": [ { "system": "Donations", "definition": "Intake donated items (sites/drives/manufacturers), adjust inventory.", "tasks": 3 }, { "system": "Product drives", "definition": "Community donation drives with participants + rollups.", "tasks": 1 } ] }, { "tag": "Transfers-Adjustments", "facet": "Domain", "definition": "Moving inventory between storage locations and applying manual count corrections at a location.", "vendors": [], "tasks": 3, "systems": [ { "system": "Transfers", "definition": "Move inventory between storage locations within an org.", "tasks": 3 }, { "system": "Adjustments", "definition": "Manual inventory corrections at a location.", "tasks": 1 } ] }, { "tag": "Items-Kits", "facet": "Domain", "definition": "Item catalog hierarchy (BaseItem/Item/KitItem, categories, units, barcodes) plus composite kits that allocate/deallocate inventory.", "vendors": [], "tasks": 3, "systems": [ { "system": "Items & catalog", "definition": "BaseItem/Item/KitItem hierarchy, categories, units, values, barcodes.", "tasks": 3 }, { "system": "Kits", "definition": "Composite items assembled from components; allocate/deallocate inventory.", "tasks": 1 } ] }, { "tag": "Organizations-Admin", "facet": "Domain", "definition": "Org/multi-tenancy setup, members/roles/invites, per-org config & feature flags, admin/impersonation/audit, activity feed.", "vendors": [], "tasks": 2, "systems": [ { "system": "Multi-tenancy & authorization", "definition": "Everything scoped to Organization; Rolify role-based access.", "tasks": 2 }, { "system": "NDBN member sync", "definition": "Syncs National Diaper Bank Network roster.", "tasks": 0 } ] }, { "tag": "Audits", "facet": "Domain", "definition": "Physical-count reconciliation of counted stock against recorded inventory.", "vendors": [], "tasks": 2, "systems": [ { "system": "Audits", "definition": "Physical-count reconciliation vs recorded inventory.", "tasks": 2 } ] }, { "tag": "Partners", "facet": "Domain", "definition": "Partner agencies plus their family/child request portal and the invite-approve-recertify lifecycle state machine.", "vendors": [], "tasks": 2, "systems": [ { "system": "Partners & family portal", "definition": "Partner agencies + family/child request portal.", "tasks": 2 }, { "system": "Partner lifecycle", "definition": "Invite->approve->de/reactivate->recertify state machine.", "tasks": 0 } ] }, { "tag": "Notifications-Messaging", "facet": "Domain", "definition": "Member-facing notification pipeline (enqueue->channel->dispatch), reminders, SSR email templates, internal Slack alerts, support chat.", "vendors": [ "Slack (internal alerts)", "Zendesk", "Intercom", "Noticed" ], "tasks": 1, "systems": [ { "system": "Mailers & notifications", "definition": "Transactional email (distributions, requests, reminders, broadcasts).", "tasks": 1 }, { "system": "Reminder/deadline scheduling", "definition": "Per-org reminder+deadline scheduling driving partner emails.", "tasks": 0 }, { "system": "Calendar (iCal) integration", "definition": ".ics distribution feeds via icalendar gem.", "tasks": 0 } ] }, { "tag": "Purchases", "facet": "Domain", "definition": "Recording inventory bought from vendors with per-purchase cost tracking.", "vendors": [], "tasks": 1, "systems": [ { "system": "Purchases", "definition": "Record bought inventory from vendors w/ cost tracking.", "tasks": 1 } ] }, { "tag": "Requests", "facet": "Domain", "definition": "Partner-submitted item requests, itemized and fulfilled into distributions.", "vendors": [], "tasks": 1, "systems": [ { "system": "Requests", "definition": "Partner-submitted item requests fulfilled into distributions.", "tasks": 1 } ] }, { "tag": "Storage-Locations", "facet": "Domain", "definition": "Warehouses holding inventory, with deactivation guarded by remaining on-hand stock.", "vendors": [], "tasks": 1, "systems": [ { "system": "Storage locations", "definition": "Warehouses holding inventory; deactivation guarded by on-hand stock.", "tasks": 1 } ] }, { "tag": "Auth-Sessions", "facet": "Domain", "definition": "Login, password hashing/reset, email verification, server-side session management.", "vendors": [ "Devise", "Google OAuth2" ], "tasks": 0, "systems": [ { "system": "Authentication", "definition": "Devise + invitable + Google OAuth2 for staff & partner users.", "tasks": 0 } ] }, { "tag": "Audit-Logging", "facet": "Domain", "definition": "Change/version history on payments and other models via PaperTrail.", "vendors": [], "tasks": 0, "systems": [ { "system": "Audit trail (PaperTrail)", "definition": "Change/version history + whodunnit.", "tasks": 0 } ] }, { "tag": "Data-Import-Export", "facet": "Surface", "definition": "Bulk CSV import of volunteers/supervisors/cases with failure reporting.", "vendors": [], "tasks": 2, "systems": [ { "system": "CSV export subsystem", "definition": "Per-domain CSV exporters + Exportable concern.", "tasks": 1 }, { "system": "CSV import subsystem", "definition": "Bulk import via Importable concern + model CSV parsers.", "tasks": 1 } ] }, { "tag": "Background-Jobs", "facet": "Surface", "definition": "Async job processing \u2014 Palolo SQS worker + job registry; ZenBill Delayed Job.", "vendors": [], "tasks": 1, "systems": [ { "system": "Background jobs (Delayed Job)", "definition": "Async: partner notifications, reminders, DB backup, trend caching.", "tasks": 1 } ] }, { "tag": "File-Storage", "facet": "Surface", "definition": "Active Storage attachments/variants on S3 with a media library and image processing.", "vendors": [ "S3", "Azure", "disk", "AWS S3" ], "tasks": 0, "systems": [ { "system": "File storage (ActiveStorage/S3)", "definition": "Attachments backed by AWS S3 in prod.", "tasks": 0 } ] } ] }, { "repo": "CASA", "tasks": 21, "tags": [ { "tag": "Email-Delivery", "facet": "Integration", "definition": "Outbound transactional email \u2014 Palolo SendGrid dispatch; ZenBill Rails ActionMailer layer.", "vendors": [ "SendGrid (Palolo)", "ActionMailer (ZenBill)", "ActionMailer", "Postmark", "Mailgun", "Mandrill" ], "tasks": 4, "systems": [ { "system": "Mailers", "definition": "Transactional email (admins/supervisors/volunteers/fund-requests).", "tasks": 4 } ] }, { "tag": "SMS-Delivery", "facet": "Integration", "definition": "Outbound SMS for phone verification / 2FA. Via Twilio.", "vendors": [ "Twilio", "Short.io" ], "tasks": 1, "systems": [ { "system": "SMS notifications (Twilio)", "definition": "Per-org Twilio SMS reminders/alerts.", "tasks": 1 }, { "system": "URL shortening (Short.io)", "definition": "Short.io HTTP API for SMS links.", "tasks": 0 } ] }, { "tag": "Monitoring-Analytics", "facet": "Integration", "definition": "Observability & product analytics \u2014 APM/metrics + event tracking. Via New Relic + Mixpanel.", "vendors": [ "New Relic", "Mixpanel", "Ahoy", "Blazer", "PgHero", "Flipper", "Sentry", "Slack" ], "tasks": 0, "systems": [ { "system": "Health & ops dashboards", "definition": "Health-metrics + PgHero/Flipper dashboards.", "tasks": 0 } ] }, { "tag": "Case-Contacts", "facet": "Domain", "definition": "Volunteer logging of each case contact (type/topics/duration/medium) plus polymorphic follow-up tasks.", "vendors": [], "tasks": 12, "systems": [ { "system": "Case contacts logging", "definition": "Volunteers record each contact (type/topics/duration/medium) \u2014 core workflow.", "tasks": 12 }, { "system": "Followups", "definition": "Follow-up tasks polymorphically attached to case contacts.", "tasks": 0 } ] }, { "tag": "Notifications-Messaging", "facet": "Domain", "definition": "Member-facing notification pipeline (enqueue->channel->dispatch), reminders, SSR email templates, internal Slack alerts, support chat.", "vendors": [ "Slack (internal alerts)", "Zendesk", "Intercom", "Noticed" ], "tasks": 6, "systems": [ { "system": "Reminders & scheduled services", "definition": "Time-based reminders (court-report-due, no-contact, birthdays, inactivity).", "tasks": 6 }, { "system": "In-app notifications (Noticed)", "definition": "Noticed-backed notifications UI.", "tasks": 0 } ] }, { "tag": "Organizations-Admin", "facet": "Domain", "definition": "Org/multi-tenancy setup, members/roles/invites, per-org config & feature flags, admin/impersonation/audit, activity feed.", "vendors": [], "tasks": 5, "systems": [ { "system": "Org administration & settings", "definition": "Per-org config: contact types/groups, links, banners, languages, patch notes.", "tasks": 4 }, { "system": "Users, roles & multi-tenancy", "definition": "STI user hierarchy (volunteer/supervisor/admin/all-casa-admin), per-org scoping.", "tasks": 2 } ] }, { "tag": "Volunteers-Assignment", "facet": "Domain", "definition": "Volunteer advocates and supervisors, their roster/role links, case assignment, and supervisor notes / other-duty time entries.", "vendors": [], "tasks": 5, "systems": [ { "system": "Volunteers & case assignment", "definition": "Volunteer advocates, supervisor links, assignment to cases.", "tasks": 4 }, { "system": "Supervisors", "definition": "Supervisor role, volunteer roster, weekly digest.", "tasks": 2 }, { "system": "Notes & other duties", "definition": "Supervisor notes + volunteer other-duty time entries.", "tasks": 0 } ] }, { "tag": "Reimbursements", "facet": "Domain", "definition": "Volunteer mileage/expense reimbursement with rates and an approval queue.", "vendors": [], "tasks": 5, "systems": [ { "system": "Mileage & reimbursement", "definition": "Volunteer mileage/expense reimbursement, rates, approval queue.", "tasks": 5 } ] }, { "tag": "Authorization-Permissions", "facet": "Domain", "definition": "Role/capability-based access control (abilities keyed off org membership).", "vendors": [ "Pundit" ], "tasks": 4, "systems": [ { "system": "Authorization (Pundit)", "definition": "~40 Pundit policies gating by role/org.", "tasks": 4 } ] }, { "tag": "Auth-Sessions", "facet": "Domain", "definition": "Login, password hashing/reset, email verification, server-side session management.", "vendors": [ "Devise", "Google OAuth2" ], "tasks": 3, "systems": [ { "system": "Authentication (Devise)", "definition": "Devise login/invite/password + login-activity tracking.", "tasks": 3 } ] }, { "tag": "Court-Dates-Orders", "facet": "Domain", "definition": "Court dates, hearing types, judges, and per-case court orders carried forward between hearings.", "vendors": [], "tasks": 3, "systems": [ { "system": "Court dates & hearings", "definition": "Court dates, hearing types, judges; bulk creation.", "tasks": 3 }, { "system": "Court orders", "definition": "Per-case court orders copied forward between hearings.", "tasks": 1 } ] }, { "tag": "Court-Reports", "facet": "Domain", "definition": "Per-case DOCX court report generation from a Sablon template merged with case context.", "vendors": [], "tasks": 3, "systems": [ { "system": "Court report generation", "definition": "Per-case DOCX court report from Sablon template + context.", "tasks": 3 } ] }, { "tag": "Reporting", "facet": "Domain", "definition": "Aggregate domain reports (case-contact, followup, missing-data, mileage) rendered as CSV.", "vendors": [], "tasks": 3, "systems": [ { "system": "Reporting & CSV export", "definition": "Aggregate reports (case-contact, followup, missing-data, mileage) as CSV.", "tasks": 3 } ] }, { "tag": "Case-Management", "facet": "Domain", "definition": "The central CASA child-case aggregate: court-case record, lifecycle, and case groups.", "vendors": [], "tasks": 2, "systems": [ { "system": "CASA cases (child cases)", "definition": "Central case record: child's court case, lifecycle, groups.", "tasks": 2 } ] }, { "tag": "Emancipation", "facet": "Domain", "definition": "Youth-emancipation checklists: categories and options tracked per case.", "vendors": [], "tasks": 2, "systems": [ { "system": "Emancipation checklists", "definition": "Youth-emancipation categories/options per case.", "tasks": 2 } ] }, { "tag": "Placements", "facet": "Domain", "definition": "Where a child is placed (placement records + placement types) per case.", "vendors": [], "tasks": 2, "systems": [ { "system": "Placements", "definition": "Where a child is placed (placement + types) per case.", "tasks": 2 } ] }, { "tag": "Fund-Requests", "facet": "Domain", "definition": "Fund-request forms filled into a PDF (pdf-forms) and emailed.", "vendors": [], "tasks": 0, "systems": [ { "system": "Fund requests", "definition": "Fund-request forms filled into PDF (pdf-forms) and emailed.", "tasks": 0 } ] }, { "tag": "Learning-Hours", "facet": "Domain", "definition": "Volunteer training / learning-hour logging and reporting.", "vendors": [], "tasks": 0, "systems": [ { "system": "Learning hours", "definition": "Volunteer training/learning-hour logging + reporting.", "tasks": 0 } ] }, { "tag": "Web-Frontend", "facet": "Surface", "definition": "The browser SPAs \u2014 Palolo Preact (app + HQ) and ZenBill React (dashboard + onboarding) incl. the design system.", "vendors": [], "tasks": 2, "systems": [ { "system": "Frontend (esbuild + Stimulus)", "definition": "esbuild/Sass JS, Stimulus, DataTables, SweetAlert.", "tasks": 1 }, { "system": "Decorators / presentation", "definition": "Draper-style decorators formatting objects for views.", "tasks": 1 }, { "system": "Preference sets & datatables", "definition": "Persisted per-user table state driving jQuery DataTables.", "tasks": 0 } ] }, { "tag": "File-Storage", "facet": "Surface", "definition": "Active Storage attachments/variants on S3 with a media library and image processing.", "vendors": [ "S3", "Azure", "disk", "AWS S3" ], "tasks": 2, "systems": [ { "system": "File attachments (Azure)", "definition": "ActiveStorage on Azure blob; SVG sanitized before storage.", "tasks": 2 } ] }, { "tag": "API-Layer", "facet": "Surface", "definition": "Versioned JSON API namespace (mobile sign-in) documented via Rswag/OpenAPI.", "vendors": [], "tasks": 1, "systems": [ { "system": "REST API (v1 + Swagger)", "definition": "JSON API namespace (mobile sign-in), Rswag/OpenAPI.", "tasks": 1 } ] }, { "tag": "Data-Import-Export", "facet": "Surface", "definition": "Bulk CSV import of volunteers/supervisors/cases with failure reporting.", "vendors": [], "tasks": 0, "systems": [ { "system": "CSV import", "definition": "Bulk import volunteers/supervisors/cases w/ failure reporting.", "tasks": 0 } ] } ] }, { "repo": "AWBW", "tasks": 8, "tags": [ { "tag": "Card-Payments", "facet": "Integration", "definition": "Credit-card collections \u2014 identities, merchants, payment instruments, card transfers. Via Finix.", "vendors": [ "Finix", "Stripe", "Pay" ], "tasks": 1, "systems": [ { "system": "Stripe / Pay checkout", "definition": "pay gem + Stripe: card charges, customers, webhooks, reconciliation.", "tasks": 1 } ] }, { "tag": "Monitoring-Analytics", "facet": "Integration", "definition": "Observability & product analytics \u2014 APM/metrics + event tracking. Via New Relic + Mixpanel.", "vendors": [ "New Relic", "Mixpanel", "Ahoy", "Blazer", "PgHero", "Flipper", "Sentry", "Slack" ], "tasks": 1, "systems": [ { "system": "Activity analytics (Ahoy)", "definition": "Ahoy visit/event tracking + admin activity views.", "tasks": 1 } ] }, { "tag": "Email-Delivery", "facet": "Integration", "definition": "Outbound transactional email \u2014 Palolo SendGrid dispatch; ZenBill Rails ActionMailer layer.", "vendors": [ "SendGrid (Palolo)", "ActionMailer (ZenBill)", "ActionMailer", "Postmark", "Mailgun", "Mandrill" ], "tasks": 0, "systems": [ { "system": "Mailers & email delivery", "definition": "ActionMailer flows w/ premailer CSS inlining + error handling.", "tasks": 0 } ] }, { "tag": "Geocoding", "facet": "Integration", "definition": "Address geocoding over polymorphic addresses via Geocoder and MaxMind GeoIP2.", "vendors": [ "Geocoder", "MaxMind" ], "tasks": 0, "systems": [ { "system": "Geocoding & addresses", "definition": "Geocoder + MaxMind GeoIP2 over polymorphic addresses (stubbed in tests).", "tasks": 0 } ] }, { "tag": "Events-Registration", "facet": "Domain", "definition": "Event lifecycle with public/staff registration, invoices, callouts, and bulk payments.", "vendors": [], "tasks": 5, "systems": [ { "system": "Events & registration", "definition": "Event lifecycle, public/staff registration, invoices, callouts, bulk payments.", "tasks": 5 } ] }, { "tag": "Continuing-Education", "facet": "Domain", "definition": "Continuing-education hour registrations, scholarship applications, and discounts.", "vendors": [], "tasks": 3, "systems": [ { "system": "Continuing education & scholarships", "definition": "CE-hour registrations, scholarship applications, discounts.", "tasks": 3 } ] }, { "tag": "People-Contacts", "facet": "Domain", "definition": "Person records with contact methods and professional licenses.", "vendors": [], "tasks": 3, "systems": [ { "system": "People & contact records", "definition": "Person records, contact methods, professional licenses.", "tasks": 3 } ] }, { "tag": "Payments-Ledger", "facet": "Domain", "definition": "Polymorphic-payer payment records with STI payment types, allocations, refunds, and discounts.", "vendors": [], "tasks": 2, "systems": [ { "system": "Payments & ledger (STI)", "definition": "Polymorphic-payer payments (cash/check/external/filemaker STI), allocations, refunds.", "tasks": 2 } ] }, { "tag": "Authorization-Permissions", "facet": "Domain", "definition": "Role/capability-based access control (abilities keyed off org membership).", "vendors": [ "Pundit" ], "tasks": 1, "systems": [ { "system": "Authorization / policies (ActionPolicy)", "definition": "Per-resource authorize!/authorized_scope.", "tasks": 1 } ] }, { "tag": "Workshops", "facet": "Domain", "definition": "Workshop templates, logs, ideas, variations, series, and resources.", "vendors": [], "tasks": 1, "systems": [ { "system": "Workshops & facilitation", "definition": "Workshop templates, logs, ideas, variations, series, resources.", "tasks": 1 } ] }, { "tag": "CMS-Content", "facet": "Domain", "definition": "Editorial content and rich-text authoring \u2014 stories, quotes, news, FAQs, banners, resources, grants, and Action Text bodies with mentions.", "vendors": [], "tasks": 1, "systems": [ { "system": "Content / CMS surfaces", "definition": "Editorial content: stories, quotes, news, FAQs, banners, resources, grants.", "tasks": 1 }, { "system": "Rich text & mentions (Action Text)", "definition": "Action Text bodies w/ @-mention linking to events/workshops/resources.", "tasks": 0 } ] }, { "tag": "Auth-Sessions", "facet": "Domain", "definition": "Login, password hashing/reset, email verification, server-side session management.", "vendors": [ "Devise", "Google OAuth2" ], "tasks": 0, "systems": [ { "system": "Authentication & accounts (Devise)", "definition": "Devise login, email confirm/reconfirm, welcome/reset tokens, locking.", "tasks": 0 } ] }, { "tag": "Notifications-Messaging", "facet": "Domain", "definition": "Member-facing notification pipeline (enqueue->channel->dispatch), reminders, SSR email templates, internal Slack alerts, support chat.", "vendors": [ "Slack (internal alerts)", "Zendesk", "Intercom", "Noticed" ], "tasks": 0, "systems": [ { "system": "Notifications", "definition": "In-app + emailed notifications, recipient filtering, delivery persistence.", "tasks": 0 } ] }, { "tag": "Organizations-Networks", "facet": "Domain", "definition": "Studios/organizations with status, obligations, addresses, and taggings.", "vendors": [], "tasks": 0, "systems": [ { "system": "Organizations / networks", "definition": "Studios/orgs w/ status, obligations, addresses, taggings.", "tasks": 0 } ] }, { "tag": "Affiliations-Facilitators", "facet": "Domain", "definition": "People-to-organization membership with facilitator standing and active/pending scoping.", "vendors": [], "tasks": 0, "systems": [ { "system": "Affiliations & facilitators", "definition": "People<->org membership, Facilitator standing, active/pending scoping.", "tasks": 0 } ] }, { "tag": "Impact-Reports", "facet": "Domain", "definition": "STI-based monthly/impact reports with field answers, quotes, and sector impact.", "vendors": [], "tasks": 0, "systems": [ { "system": "Impact reports", "definition": "Monthly/impact reports (STI on Report) w/ field answers, quotes, sector impact.", "tasks": 0 } ] }, { "tag": "Form-Builder", "facet": "Domain", "definition": "Dynamic form builder with fields, options, user forms, and validated submissions.", "vendors": [], "tasks": 0, "systems": [ { "system": "Form builder & submissions", "definition": "Dynamic forms \u2014 fields, options, user forms, validated submissions.", "tasks": 0 } ] }, { "tag": "Tagging-Categorization", "facet": "Domain", "definition": "Polymorphic categories, sectors, age-groups, and tags applied across models.", "vendors": [], "tasks": 0, "systems": [ { "system": "Tagging & categorization", "definition": "Polymorphic categories, sectors, age-groups, tags across models.", "tasks": 0 } ] }, { "tag": "Audit-Logging", "facet": "Domain", "definition": "Change/version history on payments and other models via PaperTrail.", "vendors": [], "tasks": 0, "systems": [ { "system": "Audit trail (PaperTrail)", "definition": "has_paper_trail version history on payments etc.", "tasks": 0 } ] }, { "tag": "Web-Frontend", "facet": "Surface", "definition": "The browser SPAs \u2014 Palolo Preact (app + HQ) and ZenBill React (dashboard + onboarding) incl. the design system.", "vendors": [], "tasks": 1, "systems": [ { "system": "Vite frontend (Turbo/Stimulus)", "definition": "Vite-bundled JS/CSS, Turbo + Stimulus + Cocoon nested forms.", "tasks": 1 } ] }, { "tag": "Background-Jobs", "facet": "Surface", "definition": "Async job processing \u2014 Palolo SQS worker + job registry; ZenBill Delayed Job.", "vendors": [], "tasks": 0, "systems": [ { "system": "Background jobs (SolidQueue)", "definition": "Async queue: bulk email, notifications, payment reconciliation.", "tasks": 0 } ] }, { "tag": "Full-Text-Search", "facet": "Surface", "definition": "Model full-text search and payer picker via SearchCop over searchable records.", "vendors": [], "tasks": 0, "systems": [ { "system": "Full-text search (SearchCop)", "definition": "RemoteSearchable model search + payer picker.", "tasks": 0 } ] }, { "tag": "File-Storage", "facet": "Surface", "definition": "Active Storage attachments/variants on S3 with a media library and image processing.", "vendors": [ "S3", "Azure", "disk", "AWS S3" ], "tasks": 0, "systems": [ { "system": "Asset & media (S3 + Active Storage)", "definition": "ActiveStorage attachments/variants on S3, media library, image processing.", "tasks": 0 } ] }, { "tag": "Admin-Console", "facet": "Surface", "definition": "Internal admin back-office UI \u2014 admin home, analytics charts, and Blazer SQL dashboards.", "vendors": [], "tasks": 0, "systems": [ { "system": "Admin dashboards (Blazer/Chartkick)", "definition": "Admin home, analytics charts, Blazer SQL dashboards.", "tasks": 0 } ] } ] }, { "repo": "Stocks in the Future", "tasks": 16, "tags": [ { "tag": "Market-Data-Feed", "facet": "Integration", "definition": "External Alpha Vantage HTTP clients that pull live stock quotes and refresh per-stock company attributes, ENV-gated and mockable.", "vendors": [ "Alpha Vantage" ], "tasks": 1, "systems": [ { "system": "Alpha Vantage price feed", "definition": "Live external stock-quote client (GLOBAL_QUOTE); ENV-gated, no-ops/mocked when unset.", "tasks": 1 }, { "system": "Stock attribute enrichment", "definition": "Second external HTTP fetch refreshing per-stock company attributes weekly.", "tasks": 0 } ] }, { "tag": "Users-Classrooms", "facet": "Domain", "definition": "Student/teacher identity via STI plus classroom enrollment history and admin-driven teacher lifecycle.", "vendors": [], "tasks": 5, "systems": [ { "system": "Classrooms & enrollment history", "definition": "Students enroll over time; current/historical membership with single-primary invariant.", "tasks": 4 }, { "system": "Users & identity (STI)", "definition": "User STI -> Student/Teacher with role predicates, admin, username/email rules.", "tasks": 3 }, { "system": "Teacher lifecycle (admin)", "definition": "Admin assigns/deactivates/reactivates teachers via discard soft-delete.", "tasks": 0 } ] }, { "tag": "Portfolios-Ledger", "facet": "Domain", "definition": "Per-student portfolio deriving cash from a transaction ledger, plus monthly point-in-time worth snapshots.", "vendors": [], "tasks": 4, "systems": [ { "system": "Portfolios & cash ledger", "definition": "Per-student portfolio deriving cash from a transaction ledger including pending holds.", "tasks": 4 }, { "system": "Portfolio snapshots", "definition": "Monthly point-in-time portfolio-worth history powering the chart.", "tasks": 2 } ] }, { "tag": "Grade-Books", "facet": "Domain", "definition": "Per-classroom-per-quarter gradebook with a draft->verified->completed state machine.", "vendors": [], "tasks": 4, "systems": [ { "system": "Grade books workflow", "definition": "Per-classroom-per-quarter gradebook with draft->verified->completed states.", "tasks": 4 } ] }, { "tag": "Earnings-Distribution", "facet": "Domain", "definition": "Converts verified grades and attendance (plus QoQ improvement) into portfolio cash.", "vendors": [], "tasks": 4, "systems": [ { "system": "Earnings distribution", "definition": "Converts verified grades/attendance plus QoQ improvement into portfolio cash.", "tasks": 4 } ] }, { "tag": "Authorization-Permissions", "facet": "Domain", "definition": "Role/capability-based access control (abilities keyed off org membership).", "vendors": [ "Pundit" ], "tasks": 2, "systems": [ { "system": "Authorization (Pundit)", "definition": "Pundit policies plus scopes and role gates.", "tasks": 2 } ] }, { "tag": "Order-Execution", "facet": "Domain", "definition": "Atomic buy/sell order validation and execution plus once-per-user trading fees over a batch.", "vendors": [], "tasks": 2, "systems": [ { "system": "Order execution engine", "definition": "Buy/sell orders validated for funds/shares and executed atomically.", "tasks": 2 }, { "system": "Transaction fees", "definition": "Flat once-per-user trading fee applied over a batch of executed orders.", "tasks": 1 } ] }, { "tag": "Stock-Catalog-Pricing", "facet": "Domain", "definition": "Stock records with cents price, prior-day price, percent-change, and active/archived state.", "vendors": [], "tasks": 2, "systems": [ { "system": "Stock catalog & pricing", "definition": "Stock records: cents price, yesterday-price, %-change, active/archived.", "tasks": 2 } ] }, { "tag": "Auth-Sessions", "facet": "Domain", "definition": "Login, password hashing/reset, email verification, server-side session management.", "vendors": [ "Devise", "Google OAuth2" ], "tasks": 0, "systems": [ { "system": "Devise authentication", "definition": "DB-authenticatable login/registration/recovery.", "tasks": 0 }, { "system": "Memorable password generation", "definition": "Faker-based memorable student-password generator.", "tasks": 0 } ] }, { "tag": "Academic-Calendar", "facet": "Domain", "definition": "School -> school-year -> quarter hierarchy with traversal helpers.", "vendors": [], "tasks": 0, "systems": [ { "system": "Academic calendar", "definition": "School -> school-year -> quarter hierarchy with traversal.", "tasks": 0 } ] }, { "tag": "Announcements", "facet": "Domain", "definition": "Admin-authored announcements with Action Text surfaced to users.", "vendors": [], "tasks": 0, "systems": [ { "system": "Announcements", "definition": "Admin announcements with Action Text surfaced to users.", "tasks": 0 } ] }, { "tag": "Web-Frontend", "facet": "Surface", "definition": "The browser SPAs \u2014 Palolo Preact (app + HQ) and ZenBill React (dashboard + onboarding) incl. the design system.", "vendors": [], "tasks": 7, "systems": [ { "system": "Public web controllers", "definition": "User-facing MVC for home, portfolios, stocks, orders, classrooms, gradebooks.", "tasks": 7 }, { "system": "Importmap frontend", "definition": "No-build Hotwire (Turbo/Stimulus) plus Chart.js via importmap.", "tasks": 1 } ] }, { "tag": "Admin-Console", "facet": "Surface", "definition": "Internal admin back-office UI \u2014 admin home, analytics charts, and Blazer SQL dashboards.", "vendors": [], "tasks": 6, "systems": [ { "system": "Admin backoffice", "definition": "Separate admin/ namespace with own layout, dashboard, sortable CRUD.", "tasks": 6 } ] }, { "tag": "Data-Layer-Schema", "facet": "Surface", "definition": "Persistence & schema \u2014 Prisma data layer + codegen + shared Zod contracts (Palolo); ActiveRecord concerns + field encryption (ZenBill).", "vendors": [], "tasks": 2, "systems": [ { "system": "ActiveRecord data layer", "definition": "Postgres with cents-money columns and strong_migrations guardrails.", "tasks": 1 }, { "system": "Soft-deletion", "definition": "Discard soft delete with hard-delete guard plus admin filtering concern.", "tasks": 1 } ] }, { "tag": "Background-Jobs", "facet": "Surface", "definition": "Async job processing \u2014 Palolo SQS worker + job registry; ZenBill Delayed Job.", "vendors": [], "tasks": 2, "systems": [ { "system": "Background jobs & scheduler", "definition": "Solid Queue recurring jobs: order execution, price/attr updates, snapshots.", "tasks": 2 } ] }, { "tag": "Data-Import-Export", "facet": "Surface", "definition": "Bulk CSV import of volunteers/supervisors/cases with failure reporting.", "vendors": [], "tasks": 2, "systems": [ { "system": "Bulk student import", "definition": "CSV-driven bulk student creation with per-row results and template.", "tasks": 2 } ] } ] }, { "repo": "Community Foundation", "tasks": 6, "tags": [ { "tag": "Email-Delivery", "facet": "Integration", "definition": "Outbound transactional email \u2014 Palolo SendGrid dispatch; ZenBill Rails ActionMailer layer.", "vendors": [ "SendGrid (Palolo)", "ActionMailer (ZenBill)", "ActionMailer", "Postmark", "Mailgun", "Mandrill" ], "tasks": 1, "systems": [ { "system": "Transactional email", "definition": "Mailers (magic-link/reset/registration) via Postmark in prod.", "tasks": 1 } ] }, { "tag": "Auth-Sessions", "facet": "Domain", "definition": "Login, password hashing/reset, email verification, server-side session management.", "vendors": [ "Devise", "Google OAuth2" ], "tasks": 2, "systems": [ { "system": "Authentication (sessions)", "definition": "Cookie-backed DB sessions with require_authentication, Current attributes, resume/terminate.", "tasks": 2 }, { "system": "Users & accounts", "definition": "Account identity: email, optional password (passwordless-capable), confirmation, super-admin.", "tasks": 1 }, { "system": "Passwordless / magic-link & confirmation", "definition": "Token magic-link sign-in, password reset, email confirm/change via generates_token_for.", "tasks": 1 } ] }, { "tag": "Organizations-Admin", "facet": "Domain", "definition": "Org/multi-tenancy setup, members/roles/invites, per-org config & feature flags, admin/impersonation/audit, activity feed.", "vendors": [], "tasks": 2, "systems": [ { "system": "Organizations (tenancy root)", "definition": "The community-foundation tenant: name, subdomain, website, logo.", "tasks": 1 }, { "system": "Multi-tenant subdomain routing", "definition": "Resolves Current.organization from subdomain, bounces apex/non-member.", "tasks": 1 } ] }, { "tag": "Scenario-Sharing", "facet": "Domain", "definition": "Opt-in public read-only sharing of a scenario via an unguessable share token.", "vendors": [], "tasks": 2, "systems": [ { "system": "Scenario sharing", "definition": "Opt-in public read-only scenario view via unguessable share_token.", "tasks": 2 } ] }, { "tag": "Giving-Scenarios", "facet": "Domain", "definition": "A donor's named giving plan with a total giving amount that parents all allocations and can be copied/shared.", "vendors": [], "tasks": 1, "systems": [ { "system": "Scenarios (giving plans)", "definition": "User's named plan with total giving amount; parent of all allocations; shareable copy.", "tasks": 1 } ] }, { "tag": "Allocation-Engine", "facet": "Domain", "definition": "The STI-backed math engine that splits a scenario's giving into ongoing, one-time, and greatest-community-need allocations.", "vendors": [], "tasks": 1, "systems": [ { "system": "Allocation engine (STI + math)", "definition": "Splits giving into ongoing (%->$, 5% perpetuity), one-time (fixed, capped), and Greatest-Community-Need.", "tasks": 1 } ] }, { "tag": "Authorization-Permissions", "facet": "Domain", "definition": "Role/capability-based access control (abilities keyed off org membership).", "vendors": [ "Pundit" ], "tasks": 0, "systems": [ { "system": "Memberships & roles (RBAC)", "definition": "member/admin/owner enum governing visibility + admin powers, with guarded role-change.", "tasks": 0 }, { "system": "Authorization / scenario scoping", "definition": "Filters scenarios by role (own vs all-org) plus viewing on behalf.", "tasks": 0 } ] }, { "tag": "Allocation-Categories", "facet": "Domain", "definition": "Org-scoped self-referential hierarchical taxonomy of program/population/organization tags that allocations target.", "vendors": [], "tasks": 0, "systems": [ { "system": "Allocation categories (taxonomy)", "definition": "Org-scoped self-referential hierarchical tags in 3 STI tabs (Program/Population/Organization).", "tasks": 0 } ] }, { "tag": "Admin-Console", "facet": "Surface", "definition": "Internal admin back-office UI \u2014 admin home, analytics charts, and Blazer SQL dashboards.", "vendors": [], "tasks": 2, "systems": [ { "system": "Admin console", "definition": "Namespaced back-office: dashboard, org settings, member mgmt, category CRUD.", "tasks": 2 } ] }, { "tag": "Web-Frontend", "facet": "Surface", "definition": "The browser SPAs \u2014 Palolo Preact (app + HQ) and ZenBill React (dashboard + onboarding) incl. the design system.", "vendors": [], "tasks": 1, "systems": [ { "system": "Stimulus / importmap frontend", "definition": "Node-free JS: importmap Stimulus (allocation slider, category picker, tabs, dialogs) + Tailwind.", "tasks": 1 } ] }, { "tag": "Background-Jobs", "facet": "Surface", "definition": "Async job processing \u2014 Palolo SQS worker + job registry; ZenBill Delayed Job.", "vendors": [], "tasks": 1, "systems": [ { "system": "Background jobs", "definition": "Solid Queue async backend (base ApplicationJob; mail delivery).", "tasks": 1 } ] }, { "tag": "File-Storage", "facet": "Surface", "definition": "Active Storage attachments/variants on S3 with a media library and image processing.", "vendors": [ "S3", "Azure", "disk", "AWS S3" ], "tasks": 0, "systems": [ { "system": "File attachments", "definition": "Active Storage image upload for org logos with content-type/size validation.", "tasks": 0 } ] } ] }, { "repo": "End Side Out", "tasks": 9, "tags": [ { "tag": "Student-Portal", "facet": "Domain", "definition": "The student-facing surface: public roster entry point and published-module learning home.", "vendors": [], "tasks": 3, "systems": [ { "system": "Student learning portal", "definition": "Student-facing home showing only published modules for the active enrolled program.", "tasks": 2 }, { "system": "Public classroom roster", "definition": "Unauthenticated UUID-addressed roster page serving as the student login entry point.", "tasks": 1 } ] }, { "tag": "Auth-Sessions", "facet": "Domain", "definition": "Login, password hashing/reset, email verification, server-side session management.", "vendors": [ "Devise", "Google OAuth2" ], "tasks": 2, "systems": [ { "system": "Admin authentication & sessions", "definition": "Cookie staff login via has_secure_password with DB Session rows, Current attrs, and return-to.", "tasks": 1 }, { "system": "Student authentication (passwordless)", "definition": "Credential-free student auth deriving a StudentSession from classroom UUID plus student id.", "tasks": 1 }, { "system": "Password reset flow", "definition": "Rate-limited tokenized reset that emails a link and invalidates sessions on success.", "tasks": 0 } ] }, { "tag": "Student-Roster", "facet": "Domain", "definition": "CRUD management of students within a school/classroom.", "vendors": [], "tasks": 2, "systems": [ { "system": "Student roster management", "definition": "CRUD for students under a school/classroom, with gender enum and grade level.", "tasks": 2 } ] }, { "tag": "Module-Scheduling", "facet": "Domain", "definition": "Materializing and publishing per-classroom scheduled modules gated by publish dates.", "vendors": [], "tasks": 2, "systems": [ { "system": "Module scheduling & publishing", "definition": "Materializes per-classroom ClassroomModule rows via generate_modules!, gated by publish_on.", "tasks": 2 } ] }, { "tag": "School-Classroom-Hierarchy", "facet": "Domain", "definition": "The School->Classroom organizational tree with cascade-delete and public classroom UUIDs.", "vendors": [], "tasks": 1, "systems": [ { "system": "School & classroom org hierarchy", "definition": "School->Classroom tree with cascade-delete; each classroom has a teacher and a public UUID.", "tasks": 1 } ] }, { "tag": "Program-Catalog", "facet": "Domain", "definition": "The curriculum catalog: Programs owning leveled ContentModules with ordered survey/game Links.", "vendors": [], "tasks": 1, "systems": [ { "system": "Program catalog & content modules", "definition": "Programs own leveled ContentModules, each with ordered survey/game Links.", "tasks": 1 } ] }, { "tag": "Program-Enrollment", "facet": "Domain", "definition": "Enrolling a classroom in programs at a level, with nested-attr and level-lock invariants.", "vendors": [], "tasks": 0, "systems": [ { "system": "Program enrollment (classroom<->program)", "definition": "Enroll a classroom in programs at a level via nested attrs, enforcing 'at least one' and level-lock invariants.", "tasks": 0 } ] }, { "tag": "Web-Frontend", "facet": "Surface", "definition": "The browser SPAs \u2014 Palolo Preact (app + HQ) and ZenBill React (dashboard + onboarding) incl. the design system.", "vendors": [], "tasks": 5, "systems": [ { "system": "Turbo/Stimulus/Tailwind frontend", "definition": "Hotwire importmap Stimulus and Turbo Stream partials for inline publishing, styled with Tailwind.", "tasks": 5 } ] }, { "tag": "Data-Layer-Schema", "facet": "Surface", "definition": "Persistence & schema \u2014 Prisma data layer + codegen + shared Zod contracts (Palolo); ActiveRecord concerns + field encryption (ZenBill).", "vendors": [], "tasks": 3, "systems": [ { "system": "ActiveRecord data & validation layer", "definition": "Enums (gender/level/link_type), presence/format validations, nested attrs, and ordering scopes.", "tasks": 3 } ] }, { "tag": "Background-Jobs", "facet": "Surface", "definition": "Async job processing \u2014 Palolo SQS worker + job registry; ZenBill Delayed Job.", "vendors": [], "tasks": 0, "systems": [ { "system": "Background jobs & DB-backed infra", "definition": "Solid Queue/Cache/Cable over SQLite backing deliver_later.", "tasks": 0 } ] }, { "tag": "Dev-Tooling", "facet": "Surface", "definition": "Custom developer tooling generators bundled with the app.", "vendors": [], "tasks": 0, "systems": [ { "system": "ADR tooling generator", "definition": "Custom Rails generator scaffolding Architecture Decision Records.", "tasks": 0 } ] } ] } ] }