{"id":48434812,"url":"https://github.com/spencerjireh/folionaut","last_synced_at":"2026-04-06T12:04:22.787Z","repository":{"id":337536833,"uuid":"1153205738","full_name":"spencerjireh/folionaut","owner":"spencerjireh","description":"A TypeScript/Express backend for portfolio websites featuring a flexible CMS, AI-powered chat with tool use, and Model Context Protocol (MCP) server integration.","archived":false,"fork":false,"pushed_at":"2026-02-22T22:37:01.000Z","size":3164,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-02-23T03:38:46.491Z","etag":null,"topics":["ai-chat","bun","cms","drizzle-orm","express","mcp","portfolio","rest-api","turso","typescript"],"latest_commit_sha":null,"homepage":"https://spencerjireh.github.io/folionaut/","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/spencerjireh.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-02-09T03:05:50.000Z","updated_at":"2026-02-22T22:37:05.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/spencerjireh/folionaut","commit_stats":null,"previous_names":["spencerjireh/folionaut"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/spencerjireh/folionaut","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/spencerjireh%2Ffolionaut","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/spencerjireh%2Ffolionaut/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/spencerjireh%2Ffolionaut/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/spencerjireh%2Ffolionaut/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/spencerjireh","download_url":"https://codeload.github.com/spencerjireh/folionaut/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/spencerjireh%2Ffolionaut/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31471487,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-06T08:36:52.050Z","status":"ssl_error","status_checked_at":"2026-04-06T08:36:51.267Z","response_time":112,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["ai-chat","bun","cms","drizzle-orm","express","mcp","portfolio","rest-api","turso","typescript"],"created_at":"2026-04-06T12:04:22.727Z","updated_at":"2026-04-06T12:04:22.778Z","avatar_url":"https://github.com/spencerjireh.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003cp align=\"center\"\u003e\n  \u003cimg src=\"docs-site/public/logo.png\" alt=\"Folionaut\" width=\"140\" height=\"140\"\u003e\n\u003c/p\u003e\n\n\u003ch1 align=\"center\"\u003eFolionaut\u003c/h1\u003e\n\n\u003cp align=\"center\"\u003e\n  \u003cstrong\u003eAI \u0026 MCP enhanced portfolio content management system\u003c/strong\u003e\n\u003c/p\u003e\n\n\u003cp align=\"center\"\u003e\n  \u003ca href=\"https://github.com/spencerjireh/folionaut/blob/main/LICENSE\"\u003e\u003cimg src=\"https://img.shields.io/github/license/spencerjireh/folionaut?style=flat-square\" alt=\"License\"\u003e\u003c/a\u003e\n  \u003ca href=\"https://github.com/spencerjireh/folionaut\"\u003e\u003cimg src=\"https://img.shields.io/github/last-commit/spencerjireh/folionaut?style=flat-square\" alt=\"Last Commit\"\u003e\u003c/a\u003e\n  \u003cimg src=\"https://img.shields.io/badge/TypeScript-5.x-3178C6?style=flat-square\u0026logo=typescript\u0026logoColor=white\" alt=\"TypeScript\"\u003e\n  \u003cimg src=\"https://img.shields.io/badge/Bun-Runtime-f9f1e1?style=flat-square\u0026logo=bun\u0026logoColor=000\" alt=\"Bun\"\u003e\n\u003c/p\u003e\n\n\u003cp align=\"center\"\u003e\n  \u003ca href=\"https://spencerjireh.github.io/folionaut/\"\u003eDocumentation\u003c/a\u003e \u0026bull;\n  \u003ca href=\"https://spencerjireh.github.io/folionaut/api/\"\u003eAPI Reference\u003c/a\u003e \u0026bull;\n  \u003ca href=\"https://spencerjireh.github.io/folionaut/guide/quick-start.html\"\u003eQuick Start\u003c/a\u003e\n\u003c/p\u003e\n\n---\n\n## Overview\n\nA TypeScript/Express backend for portfolio websites featuring a flexible CMS, AI-powered chat with tool use, and Model Context Protocol (MCP) server integration.\n\n### Key Features\n\n- **Flexible CMS** - Free-form JSON content with versioning, soft delete, and full audit trail\n- **AI Chat** - Rate-limited chat with PII obfuscation and tool use for content queries\n- **MCP Server** - Expose content tools to AI assistants via Model Context Protocol\n- **Resilient** - Circuit breaker for LLM, token bucket rate limiting, graceful degradation\n- **Observable** - OpenTelemetry tracing, Prometheus metrics, structured logging\n\n## Tech Stack\n\n\u003ctable\u003e\n  \u003ctr\u003e\n    \u003ctd align=\"center\" width=\"96\"\u003e\u003cimg src=\"https://cdn.simpleicons.org/bun/f9f1e1\" width=\"32\" height=\"32\" alt=\"Bun\"\u003e\u003cbr\u003e\u003csub\u003eBun\u003c/sub\u003e\u003c/td\u003e\n    \u003ctd align=\"center\" width=\"96\"\u003e\u003cimg src=\"https://cdn.simpleicons.org/express/000000\" width=\"32\" height=\"32\" alt=\"Express\"\u003e\u003cbr\u003e\u003csub\u003eExpress\u003c/sub\u003e\u003c/td\u003e\n    \u003ctd align=\"center\" width=\"96\"\u003e\u003cimg src=\"https://cdn.simpleicons.org/typescript/3178C6\" width=\"32\" height=\"32\" alt=\"TypeScript\"\u003e\u003cbr\u003e\u003csub\u003eTypeScript\u003c/sub\u003e\u003c/td\u003e\n    \u003ctd align=\"center\" width=\"96\"\u003e\u003cimg src=\"https://cdn.simpleicons.org/turso/4FF8D2\" width=\"32\" height=\"32\" alt=\"Turso\"\u003e\u003cbr\u003e\u003csub\u003eTurso\u003c/sub\u003e\u003c/td\u003e\n    \u003ctd align=\"center\" width=\"96\"\u003e\u003cimg src=\"https://cdn.simpleicons.org/drizzle/C5F74F\" width=\"32\" height=\"32\" alt=\"Drizzle\"\u003e\u003cbr\u003e\u003csub\u003eDrizzle\u003c/sub\u003e\u003c/td\u003e\n    \u003ctd align=\"center\" width=\"96\"\u003e\u003cimg src=\"https://cdn.simpleicons.org/redis/FF4438\" width=\"32\" height=\"32\" alt=\"Redis\"\u003e\u003cbr\u003e\u003csub\u003eRedis\u003c/sub\u003e\u003c/td\u003e\n    \u003ctd align=\"center\" width=\"96\"\u003e\u003cimg src=\"https://cdn.simpleicons.org/zod/3E67B1\" width=\"32\" height=\"32\" alt=\"Zod\"\u003e\u003cbr\u003e\u003csub\u003eZod\u003c/sub\u003e\u003c/td\u003e\n    \u003ctd align=\"center\" width=\"96\"\u003e\u003cimg src=\"https://cdn.simpleicons.org/opentelemetry/F5A800\" width=\"32\" height=\"32\" alt=\"OpenTelemetry\"\u003e\u003cbr\u003e\u003csub\u003eOTel\u003c/sub\u003e\u003c/td\u003e\n    \u003ctd align=\"center\" width=\"96\"\u003e\u003cimg src=\"https://cdn.simpleicons.org/prometheus/E6522C\" width=\"32\" height=\"32\" alt=\"Prometheus\"\u003e\u003cbr\u003e\u003csub\u003ePrometheus\u003c/sub\u003e\u003c/td\u003e\n  \u003c/tr\u003e\n\u003c/table\u003e\n\n## Quick Start\n\n```bash\n# Install\nbun install\n\n# Configure\ncp .env.example .env\n# Edit .env with your Turso and API keys\n\n# Database\nbun run db:migrate\n\n# Run\nbun run dev\n```\n\nSee the [Configuration Guide](https://spencerjireh.github.io/folionaut/guide/configuration.html) for environment variables.\n\n## API\n\n### Public\n\n| Endpoint | Description |\n|----------|-------------|\n| `GET /api/v1/content` | List published content |\n| `GET /api/v1/content/:type/:slug` | Get content item |\n| `GET /api/v1/content/bundle` | Get all content |\n| `POST /api/v1/chat` | Chat with AI |\n| `GET /api/health` | Health check |\n| `GET /api/metrics` | Prometheus metrics |\n\n### Admin\n\nRequires `X-Admin-Key` header.\n\n| Endpoint | Description |\n|----------|-------------|\n| `POST /api/v1/admin/content` | Create content |\n| `PUT /api/v1/admin/content/:id` | Update content |\n| `DELETE /api/v1/admin/content/:id` | Soft delete |\n| `GET /api/v1/admin/content/:id/history` | Version history |\n| `POST /api/v1/admin/content/:id/restore` | Restore version |\n\nFull specification: [API Reference](https://spencerjireh.github.io/folionaut/api/reference.html)\n\n## Architecture\n\n```\nsrc/\n├── routes/        # HTTP handlers\n├── services/      # Business logic\n├── repositories/  # Data access\n├── middleware/    # Express middleware\n├── cache/         # Redis with memory fallback\n├── resilience/    # Rate limiter, circuit breaker\n├── events/        # Typed event emitter\n├── llm/           # LLM provider abstraction\n├── tools/         # Shared tools (chat \u0026 MCP)\n├── mcp/           # MCP server (stdio transport)\n└── observability/ # Metrics, tracing\n```\n\nSee [Architecture Overview](https://spencerjireh.github.io/folionaut/architecture/) for details.\n\n## Documentation\n\n| Topic | Link |\n|-------|------|\n| Getting Started | [Quick Start Guide](https://spencerjireh.github.io/folionaut/guide/quick-start.html) |\n| Configuration | [Environment \u0026 Settings](https://spencerjireh.github.io/folionaut/guide/configuration.html) |\n| Architecture | [High-Level Design](https://spencerjireh.github.io/folionaut/architecture/high-level-design.html) |\n| API | [OpenAPI Reference](https://spencerjireh.github.io/folionaut/api/reference.html) |\n| MCP Server | [Integration Guide](https://spencerjireh.github.io/folionaut/integrations/mcp-server.html) |\n| Operations | [Runbook](https://spencerjireh.github.io/folionaut/operations/runbook.html) |\n\n## Scripts\n\n```bash\nbun run dev        # Development server\nbun run build      # Production build\nbun run test       # Run tests\nbun run lint       # Lint code\nbun run db:studio  # Drizzle Studio GUI\nbun run mcp        # Start MCP server\n```\n\n## License\n\nThis project is licensed under the [MIT License](LICENSE).\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fspencerjireh%2Ffolionaut","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fspencerjireh%2Ffolionaut","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fspencerjireh%2Ffolionaut/lists"}