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