Oracle3
Open-source trading engine and MCP server for prediction markets. Fee-aware no-arbitrage trading across related contracts, live on Kalshi, Polymarket and Solana or on paper.
LFX Crowdfunding connects open source contributors, projects, and organizations. Fund the projects that power the world.
FinanceGo · VueGitHub @linuxfoundationOnlineOwner unconfirmed
Have you tried it? One tap is enough. No sign-in needed.
Owners of public repositories under a personal GitHub account can sign in to verify ownership and manage the introduction themselves. No administrator approval is needed.
Sign in, generate a verification file, and commit it to this repository’s default branch within 30 minutes. Files on other branches or forks do not count. Then check the file below to manage the project without administrator approval. Keep the file to retain your access.
If needed, you will go to sign-in. After signing in, return here and press your chosen verification button again.
Run /nomorevibe verify in your project folder to verify ownership and manage the introduction yourself.
Verify in one minuteAsk about other verification options
Non-profit crowdfunding platform sustaining the open source ecosystem.
Taken from the repository README
Loading the full README. The saved excerpt is shown below.
LFX Crowdfunding enables open source projects to raise funds for development, security audits, mentorship programs, events, and community initiatives. This is the rewritten platform — a Kubernetes-native monorepo replacing the original AWS Lambda + DynamoDB system.
This repo is the standalone Crowdfunding UI and API — it is separate from LFX Self Serve. Crowdfunding data ("My Donations", "My Initiatives") that appears in Self Serve originates from this application.Read the full README ↗LFX Crowdfunding enables open source projects to raise funds for development, security audits, mentorship programs, events, and community initiatives. This is the rewritten platform — a Kubernetes-native monorepo replacing the original AWS Lambda + DynamoDB system.
Not the Self Serve integration
This repo is the standalone Crowdfunding UI and API — it is separate from LFX Self Serve. Crowdfunding data ("My Donations", "My Initiatives") that appears in Self Serve originates from this application.
Self Serve authenticates to the CF Go API using a user-issued access token obtained via a silent second
authorization_codeflow for the CF audience — the sameaccess:metoken the CF frontend uses. Seedocs/authentication-architecture.mdfor the full auth design.
lfx-crowdfunding/
├── backend/ # Go API service
│ ├── cmd/
│ │ ├── initiatives-api/ # HTTP API entrypoint
│ │ └── ledger-stats-sync/ # CronJob: syncs financial stats from Ledger HTTP API
│ ├── internal/
│ │ ├── domain/ # Domain models and repository interfaces
│ │ ├── service/ # Business logic / orchestration
│ │ ├── handler/ # HTTP handlers (Chi router)
│ │ └── infrastructure/ # DB, external clients, auth middleware
│ ├── db/
│ │ ├── migrations/ # SQL migration files (golang-migrate)
│ │ ├── scripts/ # One-time DynamoDB → Postgres migration (Python)
│ │ └── seed.sql # Development seed data
│ └── charts/ # Helm chart
├── frontend/ # Nuxt 4 frontend (Vue 3, TypeScript, Tailwind, PrimeVue)
├── docker-compose.yml # Local Postgres
└── backend/docs/
└── rewrite/ # Architecture decisions, open questions, migration plan
The platform is split into two independently deployable services:
Frontend — Nuxt 4 BFF. Handles Auth0 PKCE authentication, HTTP-only session cookies, and Stripe.js. Calls the Go API to serve pages.
Go HTTP API — Chi router. Owns all business logic: initiative CRUD, Stripe payment processing, webhook handling, email, and read-only Ledger integration.
Both are deployed as Kubernetes Deployments behind an Ingress. Background jobs run as K8s CronJobs.
See docs/architecture.md for the full system diagram and component breakdown.
| Document | Contents |
|---|---|
docs/architecture.md | System overview, component breakdown, data flows, integrations |
docs/authentication-architecture.md | Auth design — scopes, flows (CF frontend, Self Serve, RS M2M), Auth0 config |
docs/release-plan.md | Go-live release plan and smoke test checklist |
backend/docs/rewrite/01-current-system.md | Inventory of the current Lambda system — endpoints, DynamoDB tables, integrations |
backend/docs/rewrite/02-decisions.md | All architectural decisions with rationale |
backend/docs/rewrite/03-open-questions.md | Open questions with owners and blocking status |
backend/docs/rewrite/04-target-architecture.md | Target system design — tech stack, repo layout, API surface, K8s resources |
backend/docs/rewrite/05-migration-plan.md | Step-by-step migration and cutover plan |
| Concern | Choice |
|---|---|
| Framework | Nuxt 4 + Vue 3 |
| Language | TypeScript (strict) |
| Styling | Tailwind CSS + PrimeVue v4 |
| State | Pinia + Vue Query |
| Auth | OAuth2 PKCE, HTTP-only cookies |
| Payments | Stripe.js |
| Concern | Choice |
|---|---|
| Language | Go (latest stable) |
| Router | Chi |
| Database | PostgreSQL via pgx/v5 |
| Migrations | golang-migrate |
| Auth | Auth0 JWT middleware |
| Logging | slog (stdlib) |
| Tracing | OpenTelemetry |
crowdfunding schemalinuxfoundation/lfx-v2-argocd| Service | Direction | Purpose |
|---|---|---|
| Stripe | CF → Stripe | Charges, subscriptions, Stripe Connect |
| Stripe webhook | Stripe → CF | customer.subscription.deleted |
| Ledger Service | CF → Ledger (read-only) | Balance and transaction data |
| Ledger Service | Ledger → CF | Donation email callbacks (GET /v1/projects/{id}) |
| Reimbursement Service | Bidirectional | Expense policy management, beneficiary lifecycle |
| lfx-v2-email-service | CF → email-service (NATS) | Transactional email (review, approval, decline, donation receipts); templates live in backend/internal/infrastructure/clients/email_templates/ |
| GitHub | CF → GitHub | Repo stats, OAuth for project creation |
| Snowflake | Snowflake → CF | Mentorship program sync (inbound CronJob) |
| Snowflake | CF → Snowflake | Fivetran CF→Snowflake sync for LFX Self Serve |
| Auth0 | CF → Auth0 | JWT validation, user identity |
| Job | Schedule | Purpose |
|---|---|---|
ledger-stats-sync | Hourly | Syncs financial stats (balance, sponsors) from Ledger HTTP API into cached columns on initiatives |
The crowdfunding schema lives on the shared LFX v2 RDS instance. The initial migration file is at backend/db/migrations/001_initial.up.sql.
One-time DynamoDB → Postgres data migration script: backend/db/scripts/migrate_dynamo_to_postgres.py.
See backend/docs/rewrite/05-migration-plan.md for cutover procedure.
docker compose up -d
cd backend
cp .env.example .env # then fill in values — see below
psql "$DATABASE_URL" -f db/migrations/001_initial.up.sql
go run ./cmd/initiatives-api/
To seed development data after the DB schema is applied:
make db-seed
Required env vars:
| Var | Notes |
|---|---|
DATABASE_URL | postgres://crowdfunding:crowdfunding@localhost:5432/crowdfunding (matches docker-compose) |
ALLOW_MOCK_LOCAL_PRINCIPAL_BYPASS | Must be set to true to enable DISABLED_MOCK_LOCAL_PRINCIPAL |
DISABLED_MOCK_LOCAL_PRINCIPAL | Set to any non-empty string to skip JWT validation locally (requires ALLOW_MOCK_LOCAL_PRINCIPAL_BYPASS=true) |
STRIPE_SECRET_KEY | Stripe test key |
STRIPE_WEBHOOK_SECRET | Stripe test webhook secret |
STRIPE_RETURN_URL | Frontend URL Stripe redirects to after 3DS (e.g. http://localhost:3000/payment/complete) |
LEDGER_BASE_URL | Ledger service URL |
LEDGER_API_KEY | Ledger API key |
FRONTEND_BASE_URL | Frontend base URL for email links (e.g. http://localhost:3000) |
S3_UPLOAD_BUCKET | S3 bucket name for logo uploads |
S3_REGION | AWS region for S3 bucket (optional — falls back to AWS_REGION env var or SDK default region resolution if unset) |
HEIMDALL_JWKS_URL and DISABLED_MOCK_LOCAL_PRINCIPAL are mutually exclusive — the server rejects startup if both are set. When using the mock principal locally, leave HEIMDALL_JWKS_URL unset or empty. Both ALLOW_MOCK_LOCAL_PRINCIPAL_BYPASS=true and DISABLED_MOCK_LOCAL_PRINCIPAL must be set together to enable the bypass.
Node 22 is required (pnpm 9+ and the husky hooks need it):
nvm use 22
cd frontend
pnpm install
cp .env.example .env # then fill in values — see below
pnpm dev
Required env vars:
| Var | Notes |
|---|---|
NUXT_PUBLIC_AUTH0_CLIENT_ID | Auth0 client ID for the dev tenant |
NUXT_AUTH0_CLIENT_SECRET | Auth0 client secret for the dev tenant |
NUXT_JWT_SECRET | Any random string for local session signing |
Auth0 domain is set automatically to linuxfoundation-dev.auth0.com when NUXT_PUBLIC_APP_ENV=development (the default).
All commits must be signed off per the Developer Certificate of Origin:
git commit --signoff
See SECURITY.md for vulnerability reporting.
Copyright The Linux Foundation and each contributor to LFX.