Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
59 commits
Select commit Hold shift + click to select a range
e783998
feat: Agent Profile Page (Closes #204) (#223)
KodeSage Mar 20, 2026
2a9a2de
feat: implement $FNDRY wallet staking flow for bounty creation (#211)
KodeSage Mar 20, 2026
942562a
fix: allow re-reviews on workflow_dispatch by clearing old review com…
chronoeth-creator Mar 20, 2026
23eec3a
feat: Complete implementation of API Rate Limiting & Security Middlew…
yuzengbaao Mar 20, 2026
c976718
feat: Agent Registration API (Closes #203) (#220)
HuiNeng6 Mar 20, 2026
2453e7e
fix: check both PR title and body for Closes #N, handle cross-repo fo…
chronoeth-creator Mar 20, 2026
1cae86a
Implement Creator dashboard (#222)
codebestia Mar 20, 2026
ba3e83c
feat: Complete Email Notification Service (#182)
yuzengbaao Mar 20, 2026
83e7a23
chores: implemented activity feed components (#231)
KodeSage Mar 20, 2026
964ffd4
feat: Bounty Timeline Component (Closes #206) (#225)
HuiNeng6 Mar 21, 2026
5828569
Add: max 5 submission attempts per user per bounty
chronoeth-creator Mar 21, 2026
60f577f
feat: centralize error handling (#235)
codebestia Mar 21, 2026
d47cbdc
Fix: use Python for issue extraction to prevent shell injection from …
chronoeth-creator Mar 21, 2026
8c46280
feat: polish api auto-generated docs (#249)
codebestia Mar 21, 2026
1390535
feat: Contributor Reputation System (#250)
ItachiDevv Mar 21, 2026
cef1ceb
feat: implement contributor onboarding (#254)
codebestia Mar 21, 2026
647f589
feat: Add Loading Skeletons & Empty States components (#274)
HuiNeng6 Mar 21, 2026
d0c40a4
feat: CI/CD Pipeline + Docker + Staging Deploy (#256)
ItachiDevv Mar 21, 2026
860f81c
feat(wallet): add WalletAddress component with copy-to-clipboard (#294)
HuiNeng6 Mar 21, 2026
b41f45d
feat: real-time WebSocket event server with typed events and polling …
ItachiDevv Mar 21, 2026
f647585
feat: Add Dark/Light Theme Toggle (Closes #259) (#299)
HuiNeng6 Mar 21, 2026
d080a82
chores: implemented faq page (#318)
KodeSage Mar 21, 2026
00c1e4e
ci: upgrade review pipeline to 5 models (add Sonnet + DeepSeek)
Mar 21, 2026
15fb1ed
Closes #191 - Bounty Completion & Review Flow (#325)
KodeSage Mar 21, 2026
0bee7fe
chores: toast systetm (#327)
KodeSage Mar 21, 2026
203730d
docs: update README + CONTRIBUTING for 5-model review and tier changes
Mar 21, 2026
1b1a851
chore: implement contributor badge (#336)
codebestia Mar 21, 2026
b94b818
feat: Add TierProgressBar component (Closes #342) (#383)
brutusworker-arch Mar 21, 2026
41d6b35
feat: Add Breadcrumb navigation (Closes #346)
brutusworker-arch Mar 21, 2026
a7d1253
style: Add smooth theme transition animations and loading skeleton
12liu21 Mar 21, 2026
508d5f2
feat: Add TokenPrice component with DexScreener API integration
12liu21 Mar 21, 2026
7c6a30a
feat: automated payout pipeline with queue, locks, and transfer execu…
ItachiDevv Mar 21, 2026
26c57da
feat: automated payout pipeline with SPL transfers, queue, and admin …
ItachiDevv Mar 21, 2026
b19ed2a
feat: Add CountdownTimer component (Closes #341)
brutusworker-arch Mar 21, 2026
83f046e
feat: implement bounty lifecycle management (#353)
codebestia Mar 21, 2026
031cfc7
feat: PostgreSQL Full Migration — DB-First Reads (Closes #162) (#394)
ItachiDevv Mar 21, 2026
a12d083
feat: Add bounty stats API endpoint (Closes #344) (#390)
12liu21 Mar 21, 2026
cdb5c99
fix: add anthropic SDK + missing API keys to review pipeline
Mar 21, 2026
1bdc270
feat: implement backend health check endpoint with diagnostics (#343)
Mar 21, 2026
0a9e485
debug: add logging to health check to diagnose CI failure
Mar 21, 2026
95d9f25
feat: add legacy fields to health check for bot compatibility and fix…
Mar 21, 2026
003b7f6
refactor: strict spec compliance for health check, fixed uptime clock…
Mar 21, 2026
045ea0b
test: mock underlying dependencies for error coverage logic and secur…
Mar 21, 2026
d1fadcc
fix: disable cancel-in-progress to unblock PR merges
Mar 21, 2026
e2ce178
chores: Custodial Staking Escrow (#400)
KodeSage Mar 21, 2026
0fb9ec5
revert: remove yuzengbaao bot contributions (PRs #180, #182)
Mar 21, 2026
5399a6a
CLOSE #188 - Marketplace Create bounties (#402)
KodeSage Mar 21, 2026
89963e2
fix: paginate PR fetching in claim-guard + fix T3 eligibility rules
Mar 21, 2026
987abd9
fix: prevent wallet-check from dispatching duplicate reviews
Mar 21, 2026
c995451
fix: remove yuzengbaao from leaderboard, fix reputation scoring
Mar 21, 2026
8b864b5
raise PR submission limit from 5 to 50 per bounty
Mar 21, 2026
c8a882a
fix: auto-close competing PRs on issue close + check titles
Mar 21, 2026
5e100a7
fix: match 'Issue #N' and 'bounty #N' in PR issue extraction
Mar 21, 2026
b71c7cd
feat: Add ScrollToTop button component (#413)
HuiNeng6 Mar 21, 2026
208e19a
feat: review workflow v3.1 — merge-base diff, domain filter, resubmis…
Mar 21, 2026
8e541ae
feat: migrate contributor & leaderboard services to PostgreSQL (Close…
ItachiDevv Mar 21, 2026
e33d802
feat: implement production grade api rate limiting (#421)
codebestia Mar 21, 2026
940c8f5
feat(security): Production security hardening (Issue #197)
HuiNeng6 Mar 21, 2026
91f9988
fix: remove unused Optional import
HuiNeng6 Mar 21, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
181 changes: 181 additions & 0 deletions .env.example
Original file line number Diff line number Diff line change
@@ -0,0 +1,181 @@
# SolFoundry environment configuration
# Copy to .env: cp .env.example .env
#
# IMPORTANT: Never commit .env files with real secrets!
# All secrets should be set via secure environment variables in production.

# =============================================================================
# ENVIRONMENT CONFIGURATION
# =============================================================================

# Environment: development, staging, production
ENV=development

# Force HTTPS redirect (set to true in production)
FORCE_HTTPS=true

# =============================================================================
# DATABASE CONFIGURATION
# =============================================================================

# PostgreSQL connection
# Format: postgresql+asyncpg://user:password@host:port/database
POSTGRES_USER=solfoundry
POSTGRES_PASSWORD=CHANGE_ME_USE_STRONG_PASSWORD
POSTGRES_DB=solfoundry
POSTGRES_PORT=5432

# Full database URL (overrides individual settings)
DATABASE_URL=postgresql+asyncpg://solfoundry:CHANGE_ME_USE_STRONG_PASSWORD@postgres:5432/solfoundry

# Connection pool settings
DB_POOL_SIZE=5
DB_POOL_MAX_OVERFLOW=10
DB_POOL_TIMEOUT=30

# =============================================================================
# REDIS CONFIGURATION
# =============================================================================

REDIS_PORT=6379
REDIS_URL=redis://redis:6379/0

# =============================================================================
# APPLICATION SECURITY
# =============================================================================

# Backend port
BACKEND_PORT=8000

# JWT Secret Key (REQUIRED in production)
# Generate with: python -c "import secrets; print(secrets.token_urlsafe(32))"
JWT_SECRET_KEY=CHANGE_ME_GENERATE_WITH_SECRETS_TOKEN_URLSAFE_32

# General secret key for session/cookie signing
SECRET_KEY=CHANGE_ME_GENERATE_WITH_SECRETS_TOKEN_URLSAFE_32

# Token expiration
ACCESS_TOKEN_EXPIRE_MINUTES=60
REFRESH_TOKEN_EXPIRE_DAYS=7

# =============================================================================
# GITHUB INTEGRATION
# =============================================================================

# GitHub OAuth App credentials
# Create at: https://github.com/settings/developers
GITHUB_CLIENT_ID=your_github_client_id
GITHUB_CLIENT_SECRET=your_github_client_secret

# OAuth redirect URI (must match GitHub App settings)
GITHUB_REDIRECT_URI=http://localhost:3000/auth/callback

# GitHub Personal Access Token (for API access)
GITHUB_TOKEN=

# Webhook secret for GitHub webhooks
# Generate with: python -c "import secrets; print(secrets.token_urlsafe(16))"
GITHUB_WEBHOOK_SECRET=CHANGE_ME_GENERATE_WEBHOOK_SECRET

# =============================================================================
# SOLANA BLOCKCHAIN
# =============================================================================

# Solana RPC endpoint
# Development: https://api.devnet.solana.com
# Production: https://api.mainnet-beta.solana.com (or your RPC provider)
SOLANA_RPC_URL=https://api.devnet.solana.com

# Treasury wallet (DO NOT include private key here!)
# Set via secure environment variable or secrets manager
# TREASURY_PRIVATE_KEY should be set in production secrets

# =============================================================================
# CORS & SECURITY HEADERS
# =============================================================================

# Allowed CORS origins (comma-separated)
# In production, list your actual domains
ALLOWED_ORIGINS=https://solfoundry.org,https://www.solfoundry.org

# In development, localhost origins are automatically added

# CSP Report URI (optional)
CSP_REPORT_URI=/api/csp-report

# =============================================================================
# RATE LIMITING
# =============================================================================

# Rate limits per minute per IP/user
RATE_LIMIT_AUTH=5
RATE_LIMIT_API=60
RATE_LIMIT_WEBHOOKS=120

# Maximum request payload size (bytes)
MAX_PAYLOAD_SIZE=10485760

# =============================================================================
# BACKUP CONFIGURATION
# =============================================================================

# PostgreSQL backup settings
BACKUP_ENABLED=true
BACKUP_SCHEDULE=0 3 * * *
BACKUP_RETENTION_DAYS=30
BACKUP_S3_BUCKET=
BACKUP_S3_PREFIX=solfoundry/

# =============================================================================
# MONITORING & LOGGING
# =============================================================================

# Log level: DEBUG, INFO, WARNING, ERROR, CRITICAL
LOG_LEVEL=INFO

# Sentry DSN (optional, for error tracking)
# SENTRY_DSN=https://xxx@sentry.io/xxx

# Health check URLs (set as GitHub repository variables)
STAGING_HEALTH_URL=https://staging-api.solfoundry.org/health
PRODUCTION_HEALTH_URL=https://api.solfoundry.org/health

# =============================================================================
# FRONTEND CONFIGURATION
# =============================================================================

FRONTEND_PORT=3000
VITE_API_URL=http://localhost:8000

# =============================================================================
# DEVELOPMENT ONLY
# =============================================================================

# Skip authentication (development only!)
# NEVER set to true in production
AUTH_ENABLED=true

# SQL echo for debugging
SQL_ECHO=false

# =============================================================================
# SECURITY CHECKLIST FOR PRODUCTION
# =============================================================================
#
# Before deploying to production, ensure:
#
# 1. [ ] All CHANGE_ME values are replaced with strong random values
# 2. [ ] JWT_SECRET_KEY is at least 32 characters
# 3. [ ] SECRET_KEY is at least 32 characters
# 4. [ ] DATABASE_URL uses strong password
# 5. [ ] GITHUB_CLIENT_SECRET is set
# 6. [ ] GITHUB_WEBHOOK_SECRET is set
# 7. [ ] SOLANA_RPC_URL points to mainnet or production RPC
# 8. [ ] ALLOWED_ORIGINS lists only your production domains
# 9. [ ] ENV=production
# 10. [ ] FORCE_HTTPS=true
# 11. [ ] AUTH_ENABLED=true (never false in production)
# 12. [ ] Backup S3 bucket is configured
# 13. [ ] All secrets are in secrets manager, not .env file
#
# =============================================================================
36 changes: 35 additions & 1 deletion .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -256,11 +256,44 @@ jobs:
run: cargo fmt -- --check
continue-on-error: true

# ==================== DOCKER BUILD + SMOKE TEST ====================
# Builds both images via compose, starts all 4 services, curls /health.
docker-build:
name: Docker Build & Smoke Test
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Validate Dockerfiles exist
run: |
test -f Dockerfile.backend || { echo "Missing Dockerfile.backend"; exit 1; }
test -f Dockerfile.frontend || { echo "Missing Dockerfile.frontend"; exit 1; }
- name: Validate Docker Compose config
run: docker compose config --quiet
- name: Build and start all services
run: docker compose up -d --build --wait --wait-timeout 120
- name: Verify backend health
run: |
for i in $(seq 1 15); do
if curl -sf http://localhost:8000/health | grep -q ok; then
echo "Backend healthy"; exit 0
fi; sleep 5
done
docker compose logs backend; exit 1
- name: Verify all 4 services running
run: |
running=$(docker compose ps --status running --format json | grep -c '"Service"')
if [ "$running" -lt 4 ]; then
echo "Expected 4 services, got $running"; docker compose ps; exit 1
fi
- name: Tear down
if: always()
run: docker compose down -v

# ==================== SUMMARY ====================
ci-status:
name: CI Status Summary
runs-on: ubuntu-latest
needs: [backend-lint, backend-tests, frontend-lint, frontend-typecheck, frontend-tests, frontend-build, contracts-check, rust-lint]
needs: [backend-lint, backend-tests, frontend-lint, frontend-typecheck, frontend-tests, frontend-build, contracts-check, rust-lint, docker-build]
if: always()
steps:
- name: Check CI Results
Expand All @@ -275,6 +308,7 @@ jobs:
echo "| Frontend Type Check | ${{ needs.frontend-typecheck.result }} |" >> $GITHUB_STEP_SUMMARY
echo "| Frontend Tests | ${{ needs.frontend-tests.result }} |" >> $GITHUB_STEP_SUMMARY
echo "| Frontend Build | ${{ needs.frontend-build.result }} |" >> $GITHUB_STEP_SUMMARY
echo "| Docker Build | ${{ needs.docker-build.result }} |" >> $GITHUB_STEP_SUMMARY
echo "| Contracts Check | ${{ needs.contracts-check.result }} |" >> $GITHUB_STEP_SUMMARY
echo "| Rust Lint | ${{ needs.rust-lint.result }} |" >> $GITHUB_STEP_SUMMARY

Expand Down
Loading
Loading