diff --git a/sources/.~lock.task-instructions.md# b/sources/.~lock.task-instructions.md# deleted file mode 100644 index 10e15c3..0000000 --- a/sources/.~lock.task-instructions.md# +++ /dev/null @@ -1 +0,0 @@ -,K12/Eric,K12,06.08.2026 14:33,file:///C:/Users/Eric/AppData/Roaming/LibreOffice/4; \ No newline at end of file diff --git a/sources/FAQ.pdf b/sources/FAQ.pdf new file mode 100755 index 0000000..bc7ef43 Binary files /dev/null and b/sources/FAQ.pdf differ diff --git a/sources/Workflows.pdf b/sources/Workflows.pdf new file mode 100755 index 0000000..85bc4bc Binary files /dev/null and b/sources/Workflows.pdf differ diff --git a/sources/behavioral-rating-dimensions.pdf b/sources/behavioral-rating-dimensions.pdf new file mode 100755 index 0000000..48de662 Binary files /dev/null and b/sources/behavioral-rating-dimensions.pdf differ diff --git a/sources/searching-for-model-failures--harness-ladder.pdf b/sources/searching-for-model-failures--harness-ladder.pdf new file mode 100755 index 0000000..e3733e8 Binary files /dev/null and b/sources/searching-for-model-failures--harness-ladder.pdf differ diff --git a/sources/task-catalog.json b/sources/task-catalog.json new file mode 100644 index 0000000..09cb287 --- /dev/null +++ b/sources/task-catalog.json @@ -0,0 +1,4076 @@ +{ + "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 + } + ] + } + ] + } + ] +} diff --git a/sources/task-instructions.md b/sources/task-instructions.md index 61667b7..34a839a 100644 --- a/sources/task-instructions.md +++ b/sources/task-instructions.md @@ -58,9 +58,7 @@ grader agent grades each run three times and averages the results. The **How Gr explains the scoring in full. # **Where to ask questions** -Questions and feedback requests go to the project Slack channel,  #ext-surge-theProject. Please do not -send Admins direct messages unless an Admin asks you to. Please read the [**FAQ document**](https://myDocs.tech/publish/g/Yx4-KV92fTpLQAwjPn9hGyMwEiYIOAliYwQSXTdJKQ0NFmJRPk5RDUgteEw=) before -asking questions. If you can't find an answer there, reach out on Slack. Before you open any repository, +Questions and feedback requests go to the project Slack channel,  #ext-surge-theProject. Please do not send Admins direct messages unless an Admin asks you to. Please read the [**FAQ document**] before asking questions. If you can't find an answer there, reach out on Slack. Before you open any repository, @@ -948,8 +946,8 @@ the **Reference Runs & Detectors** section explains the runs and the reports t Before you click submit, export your answers using the Import/Export panel on the left-hand side of the task page. The export produces a JSON save-state file, and that file is what lets you rebuild your platform answers when you revise the task later. Export before every submission so your work is saved. -If you forgot to export your task, find your previous submission and export it from [**your past**](https://myDocs.tech/workers/past_responses) -[**responses page**](https://myDocs.tech/workers/past_responses). +If you forgot to export your task, find your previous submission and export it from [**your past**] +[**responses page**] On the Submit page, upload the tarball, complete the feedback request field using the four-item @@ -1164,7 +1162,7 @@ The Setup page asks which repository you chose. Reviewers use your answer to rou # **CalmBill (CalmBill-006)** 🔒 **Private** -📺 [**2-min codebase tour**](https://images-for-tasks.s3.amazonaws.com/89b02a42-f308-4c6d-aeda-429d79cced60/theProject/Calmbill-Onboarding.pdf) +📺 [**2-min codebase tour**] image for Calmbill-Onboarding.pdf A **B2B payment and invoice platform** built on Rails 7 + React 18. Businesses use CalmBill to send and @@ -1185,7 +1183,7 @@ receive money via ACH transfers and credit cards, manage invoices, and sync with # **Lollipolusa (Lollipolusa-031)** 🔒 **Private** -📺 [**2-min codebase tour**](https://images-for-tasks.s3.amazonaws.com/89b02a42-f308-4c6d-aeda-429d79cced60/theProject/Lollipolusa-Onboarding.pdf) +📺 [**2-min codebase tour**] Lollipolusa-Onboarding.pdf An **employee financial wellness platform** built as a TypeScript monorepo (pnpm, 9 packages). @@ -1547,7 +1545,7 @@ The **Behavioral Rating Dimensions** document, linked in Quick Links, defines **Takeaway.** Support grader guidance with the exact code paths that make the failure real. -[**Download the full task**](https://myDocs.tech/publish/s/1ce2abf5-1c1d-446e-8dee-8ad2833d94a8.zip) +[**Download the full task**] # ✅ **Example 2. A heavy penalty for load-** # **bearing ambiguity** @@ -1605,7 +1603,7 @@ tells the grader not to give high credit just because the resulting test passes. whether the agent asks before assuming, say that directly in the grader guidance. -[**Download the full task**](https://myDocs.tech/publish/s/2b4e4621-0a36-4801-b5e0-1da3dd27c8b8.zip) +[**Download the full task**] # ✅ **Example 3. A heavy penalty for** # **unsupported UI claims** @@ -1671,7 +1669,7 @@ from earning high credit for confident claims they did not verify. and which are secondary. Enforce unverified claims with an appropriately heavy penalty. -[**Download the full task**](https://myDocs.tech/publish/s/f96c34b1-8abe-46a4-9b6a-1e87313e6758.zip) +[**Download the full task**] # ✅ **Example 4. A scoping task where the** # **agent complied too narrowly** @@ -1761,7 +1759,7 @@ investigate and surface that before declaring success. -[**Download the full task**](https://myDocs.tech/publish/s/95f7db0f-1246-4c86-905d-75e0f5c3043c.zip) +[**Download the full task**] # ✅ **Example 5. A task that required** # **pushback with options on regulated data** @@ -1830,7 +1828,7 @@ written is not the same as surfacing them while the user can still choose safegu -[**Download the full task**](https://myDocs.tech/publish/s/2aa365f5-9808-4c4c-b33b-9e23cfac172a.zip) +[**Download the full task**] # ❌ **Example 6. A prompt too ambiguous** # **to write grader guidance for** @@ -1969,7 +1967,7 @@ dimensions the task targets instead of picking a winner. # 🛠️ **Troubleshooting & FAQ** -Start with the [**FAQ document**](https://myDocs.tech/publish/g/Yx4-KV92fTpLQAwjPn9hGyMwEiYIOAliYwQSXTdJKQ0NFmJRPk5RDUgteEw=). It answers the most common questions on this project. +Start with the [**FAQ document**]. It answers the most common questions on this project. This section collects the most frequent problems and their fixes. Several fixes refer to the toolkit's two @@ -2024,7 +2022,7 @@ download new save states regularly while working on this project so you can resume your work later if you take a break or work -across multiple daily sessions[**.**](https://myDocs.tech/workers/tasks/5cf4e8f8-75ab-484a-b727-25807fb627b9?task_response_id=62c12f91-b28d-4624-a105-49816bf8eaa5&jumpTo=bookmark%3Asave_progress) +across multiple daily sessions[**.**] **Step** **[1]** **Step** **[2]** **Step** **[3]** **Save the state file somewhere you won't lose it.** If you want to sanity-check that the save state works, you can duplicate the tab and try loading it in there.