Files
project-work/sources/task-catalog.json

4077 lines
138 KiB
JSON

{
"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
}
]
}
]
}
]
}