Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
94 commits
Select commit Hold shift + click to select a range
a621632
Implement tag origin tracing metadata and upgrade schema to list of o…
lauxenz Jul 3, 2026
d69c160
Fixed indentation error from copilot
lauxenz Jul 11, 2026
acd9368
Merge pull request #75 from DigitalProductInnovationAndDevelopment/73…
lauxenz Jul 11, 2026
bc63394
feat: implement Backend for Frontend (BFF) layer using FastAPI
lauxenz Jul 11, 2026
37f3dce
feat: Add 360Giving API wrapper and unit tests, update User-Agent hea…
lauxenz Jul 17, 2026
df10cc1
Merge pull request #78 from DigitalProductInnovationAndDevelopment/76…
lauxenz Jul 19, 2026
cf452a2
Merge pull request #79 from DigitalProductInnovationAndDevelopment/77…
lauxenz Jul 19, 2026
192518f
Merge remote-tracking branch 'origin/dev' into 64-tag-origin-tracing-…
Copilot Jul 19, 2026
99d9358
Merge pull request #80 from DigitalProductInnovationAndDevelopment/64…
lauxenz Jul 19, 2026
6757d29
feat: implement UK Charity Commission and 360Giving API ingestion pip…
lauxenz Jul 19, 2026
48ea916
test: add comprehensive SQLiteCharityRepository and admin logger edge…
lauxenz Jul 19, 2026
1f097a1
Merge pull request #82 from DigitalProductInnovationAndDevelopment/81…
lauxenz Jul 19, 2026
3911d9a
Add live foundation news summary endpoint
Jul 20, 2026
7c437d0
draft: implement frontend dashboard and pipeline controls
lauxenz Jul 20, 2026
85f707c
Merge remote-tracking branch 'origin/feature/foundation-news-scraper'…
lauxenz Jul 20, 2026
40ca047
feat: Added initial dashboard, changed pipeline, implemented ai news …
lauxenz Jul 21, 2026
344db1a
Merge pull request #85 from DigitalProductInnovationAndDevelopment/83…
manuelgrabmayer Jul 21, 2026
54b4b73
fix: stabilize frontend and database initialization
manuelgrabmayer Jul 22, 2026
d05689c
feat: expose real grant sankey and map data
manuelgrabmayer Jul 22, 2026
2dce8c9
feat: add traceable geo and programme enrichment
manuelgrabmayer Jul 22, 2026
43a048b
feat: integrate Philea organization data
manuelgrabmayer Jul 23, 2026
011c92a
feat: add explainable configurable scoring
manuelgrabmayer Jul 23, 2026
c8fd3d7
docs: document architecture and final verification
manuelgrabmayer Jul 23, 2026
f742016
fix: normalize geographic score evidence
manuelgrabmayer Jul 23, 2026
1e5de21
fix: keep local API authentication on one hostname
manuelgrabmayer Jul 23, 2026
7f8c622
feat: derive overview charts from cached grants
manuelgrabmayer Jul 23, 2026
9f5acaa
data: add 500 cached 360Giving grants
manuelgrabmayer Jul 23, 2026
7c55c0f
feat: add responsive global grant analytics
manuelgrabmayer Jul 23, 2026
41bc4df
Implement scalable grant intelligence dashboard
manuelgrabmayer Jul 24, 2026
6799e70
Apply Netlight colour palette
manuelgrabmayer Jul 24, 2026
9c46f27
Merge pull request #87 from DigitalProductInnovationAndDevelopment/7-…
manuelgrabmayer Jul 24, 2026
4fff472
feat: add donor intelligence, saved views, and news briefings
manuelgrabmayer Jul 25, 2026
927a72c
fix: include shared grant scope module
manuelgrabmayer Jul 25, 2026
d58efd6
Merge pull request #89 from DigitalProductInnovationAndDevelopment/9-…
manuelgrabmayer Jul 25, 2026
7d0b465
Improve grant explorer and favorites workflow
manuelgrabmayer Jul 25, 2026
2d5a783
Merge pull request #90 from DigitalProductInnovationAndDevelopment/8-…
manuelgrabmayer Jul 25, 2026
e81ac97
Improve local profile linking and dashboard performance
manuelgrabmayer Jul 26, 2026
eb31a91
Fix Foothold reset, enrichment, and relevance scoring
manuelgrabmayer Jul 27, 2026
408eb87
Merge pull request #92 from DigitalProductInnovationAndDevelopment/12…
manuelgrabmayer Jul 28, 2026
19e84ba
Document immutable AWS readiness baseline
manuelgrabmayer Jul 28, 2026
af052d6
Document PostgreSQL target architecture
manuelgrabmayer Jul 28, 2026
949c35e
Harden API authentication and authorization
manuelgrabmayer Jul 28, 2026
3c0ee37
Build data-free PostgreSQL container foundation
manuelgrabmayer Jul 28, 2026
f883e77
Define versioned PostgreSQL schema
manuelgrabmayer Jul 28, 2026
262b4a8
Implement deterministic PostgreSQL data migration
manuelgrabmayer Jul 28, 2026
9afbc4a
Preserve exchange-rate month precision
manuelgrabmayer Jul 28, 2026
919aa96
Make migration activation lossless and atomic
manuelgrabmayer Jul 28, 2026
a74d75c
Report explicit foreign-key reconciliation
manuelgrabmayer Jul 28, 2026
d6d2b69
Restore dataset state after migration tests
manuelgrabmayer Jul 28, 2026
e6b3ad7
Complete PostgreSQL data migration gate
manuelgrabmayer Jul 28, 2026
6c208ac
Complete PostgreSQL application runtime
manuelgrabmayer Jul 29, 2026
0e8b37c
Complete PostgreSQL performance and concurrency
manuelgrabmayer Jul 29, 2026
7a7d35e
Complete frontend remediation and browser gates
manuelgrabmayer Jul 29, 2026
c81e705
Complete durable pipeline and storage contracts
manuelgrabmayer Jul 29, 2026
d9baa6f
Complete governance and retention controls
manuelgrabmayer Jul 29, 2026
8ef7b3a
Complete observability contracts and runbooks
manuelgrabmayer Jul 29, 2026
86c794f
Define guarded AWS infrastructure
manuelgrabmayer Jul 29, 2026
6518fbd
Complete guarded CI and deployment workflows
manuelgrabmayer Jul 29, 2026
e70242c
Complete shadow comparison and cutover preparation
manuelgrabmayer Jul 29, 2026
6a00f70
Fix CI pytest invocation and coverage evidence
manuelgrabmayer Jul 29, 2026
5b2fe5e
Validate and format Terraform definitions
manuelgrabmayer Jul 29, 2026
be3630b
Correct Terraform backend evidence
manuelgrabmayer Jul 29, 2026
0554bd5
Add ECS-compatible local deployment path
manuelgrabmayer Aug 6, 2026
d6b0fe7
feat: align frontend runtime with ECS networking
manuelgrabmayer Aug 6, 2026
d1c79a6
feat: add public read-only demo access
manuelgrabmayer Aug 6, 2026
e06ab1e
feat: add AWS demo infrastructure plan
manuelgrabmayer Aug 6, 2026
2bcd68b
fix: require TLS for PostgreSQL migrations
manuelgrabmayer Aug 7, 2026
b1fa757
fix: preserve encoded database passwords
manuelgrabmayer Aug 7, 2026
edd3633
fix: align demo readiness with readonly runtime
manuelgrabmayer Aug 7, 2026
5aba335
fix: run ECS frontend on unprivileged port
manuelgrabmayer Aug 7, 2026
67d6c25
Merge pull request #93 from DigitalProductInnovationAndDevelopment/91…
manuelgrabmayer Aug 7, 2026
f6efff1
feat: add CloudFront Cognito RBAC access
manuelgrabmayer Aug 11, 2026
1f60055
fix: make CloudFront Cognito deployment rollback-safe
manuelgrabmayer Aug 12, 2026
83a5d9a
fix: separate runtime database read and write access
manuelgrabmayer Aug 12, 2026
08219db
fix: make RDS role provisioning compatible with rds_superuser
manuelgrabmayer Aug 12, 2026
0d123c7
feat(frontend): add Cognito guest sign-in footer
manuelgrabmayer Aug 12, 2026
565fd01
Deploy durable pipeline worker and external API secrets
manuelgrabmayer Aug 12, 2026
4cf9dd4
Fix queued job retirement timestamps
manuelgrabmayer Aug 12, 2026
7d1034e
Allow release gate reads for runtime role
manuelgrabmayer Aug 12, 2026
527a9e6
Use pipeline role for worker schema gate
manuelgrabmayer Aug 12, 2026
8caf5b2
Allow worker snapshot fallback discovery
manuelgrabmayer Aug 12, 2026
e98c7e0
Route Anthropic requests through Netlight gateway
manuelgrabmayer Aug 13, 2026
3c9d290
Handle source funder profile hydration jobs
manuelgrabmayer Aug 13, 2026
689de0d
Merge pull request #95 from DigitalProductInnovationAndDevelopment/94…
manuelgrabmayer Aug 13, 2026
8f7f341
docs: consolidate customer handover
manuelgrabmayer Aug 14, 2026
31c35c7
ci: fix small quality gate failures
manuelgrabmayer Aug 14, 2026
9fb397b
ci: use resolvable Trivy action
manuelgrabmayer Aug 14, 2026
03fb056
ci: repair remaining quality gates
manuelgrabmayer Aug 14, 2026
99cb7ba
ci: clear remaining security checks
manuelgrabmayer Aug 14, 2026
fa86bf2
ci: correct linux provider checksums
manuelgrabmayer Aug 14, 2026
408f4a6
ci: run license-free secret scanning
manuelgrabmayer Aug 14, 2026
b649cd4
ci: document intentional terraform exposure
manuelgrabmayer Aug 14, 2026
d350913
Merge pull request #98 from DigitalProductInnovationAndDevelopment/97…
manuelgrabmayer Aug 14, 2026
1d98f62
chore: prepare dev promotion to main
manuelgrabmayer Aug 14, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
63 changes: 63 additions & 0 deletions .dockerignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,63 @@
.git
.gitignore
.gitattributes
.github
.env
.env.*

**/__pycache__
**/*.py[cod]
**/.pytest_cache
**/.mypy_cache
**/.ruff_cache
**/.cache
.coverage
.coverage.*
coverage.xml
htmlcov

.venv
venv
env
ENV
**/*.egg-info
build
dist

frontend/node_modules
frontend/dist
frontend/.test-dist
node_modules

*.db
*.db-*
*.sqlite
*.sqlite3
*.sqlite-*
src/data/**
!src/data/*.py
**/raw/**
**/processed/**
**/preprocessed/**
**/browser-profile/**
**/browser_profiles/**
**/playwright-report/**
**/test-results/**

docs
exports
**/exports/**
**/audit-staging/**
**/*.tfstate
**/*.tfstate.*

*.log
*.tmp
*.temp
*.bak
*.swp
*.swo
.DS_Store
._*

*.ipynb
71 changes: 71 additions & 0 deletions .env.example
Original file line number Diff line number Diff line change
@@ -0,0 +1,71 @@
# Copy to .env for local work only. The real .env is ignored by Git; never commit secrets.
APP_ENV=development
# Operational deployments default to PostgreSQL. The SQLite mode is local/test
# migration compatibility only; shadow_compare requires a separate snapshot.
# DATA_RUNTIME_MODE=postgresql
# SHADOW_SQLITE_PATH=/absolute/path/to/coherent-shadow-snapshot.db
AUTH_MODE=disabled
ACCESS_TOKEN_EXPIRE_MINUTES=30
SESSION_COOKIE_SECURE=false
CORS_ORIGINS=http://localhost:5173,http://127.0.0.1:5173

# Production/staging must use OIDC and inject these values through the runtime.
# AUTH_MODE=oidc
# OIDC_ISSUER=https://identity.example.invalid/
# OIDC_AUDIENCE=foundation-intelligence-api
# OIDC_JWKS_URL=https://identity.example.invalid/.well-known/jwks.json
# OIDC_ROLE_CLAIM=roles

# Explicit local-only authentication. Use unique values; no defaults are supplied.
# AUTH_MODE=development
# DEV_AUTH_ENABLED=true
# DEV_AUTH_USERNAME=
# DEV_AUTH_PASSWORD=
# DEV_AUTH_SECRET=
# DEV_AUTH_ALLOWED_HOSTS=127.0.0.1,::1,localhost

# Public, non-production demo only. Both values are required together. This
# mode has no login/session and exposes only the reviewed aggregate route
# allowlist in bff.security; all other API routes remain protected.
# APP_ENV=demo
# DATA_RUNTIME_MODE=postgresql
# AUTH_MODE=public_readonly
# DEV_AUTH_ENABLED=false
# CORE_PROXY_ENABLED=false
# CORS_ORIGINS=

RATE_LIMIT_REQUESTS=120
RATE_LIMIT_WINDOW_SECONDS=60
MAX_REQUEST_BODY_BYTES=1048576
REQUEST_TIMEOUT_SECONDS=30

# PostgreSQL readiness/runtime configuration. Prefer a mounted secret file.
# DATABASE_URL=postgresql+asyncpg://user:password@localhost:5432/foundation_intelligence
DATABASE_HOST=127.0.0.1
DATABASE_PORT=5432
DATABASE_NAME=foundation_intelligence
DATABASE_USER=foundation_app
# DATABASE_PASSWORD_FILE=/absolute/path/to/postgres_password
# AWS/RDS tasks use encrypted PostgreSQL transport.
DATABASE_SSL_MODE=disable
DATABASE_POOL_SIZE=5
DATABASE_MAX_OVERFLOW=5
DATABASE_POOL_TIMEOUT_SECONDS=5
DATABASE_CONNECT_TIMEOUT_SECONDS=5
DATABASE_STATEMENT_TIMEOUT_MS=30000

CORE_PROXY_ENABLED=false
CORE_API_URL=http://127.0.0.1:8080
# CORE_API_ALLOWED_HOSTS=127.0.0.1
# CORE_PROXY_ALLOWED_PATHS=v1/data
# CORE_PROXY_ALLOWED_METHODS=GET
# CORE_PROXY_FORWARD_HEADERS=accept,content-type,x-request-id
# CORE_API_BEARER_TOKEN=
DB_PATH=src/data/charities.db
DATA_PATH=src/data/raw/register_of_charities_results.json
SCORE_CONFIG_PATH=config/scoring.example.json

# Optional: required only by the live foundation-news summary endpoint.
# ANTHROPIC_AUTH_TOKEN=
# ANTHROPIC_BASE_URL=
# CLAUDE_MODEL=claude-sonnet-5
Loading
Loading