{"id":42940235,"url":"https://github.com/tentaplane/tentapress","last_synced_at":"2026-04-01T21:29:45.999Z","repository":{"id":336196251,"uuid":"1146690725","full_name":"tentaplane/tentapress","owner":"tentaplane","description":"A plugin-first Laravel CMS with client-safe editing, SQLite-first setup, and static ZIP deployments.","archived":false,"fork":false,"pushed_at":"2026-03-19T21:35:37.000Z","size":4250,"stargazers_count":0,"open_issues_count":1,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-03-20T03:20:08.602Z","etag":null,"topics":["alpinejs","blade","cms","cms-framework","content-management-system","laravel","tailwind","tailwindcss"],"latest_commit_sha":null,"homepage":"https://tentapress.com","language":"PHP","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/tentaplane.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":"SECURITY.md","support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":"AGENTS.md","dco":null,"cla":null}},"created_at":"2026-01-31T14:18:52.000Z","updated_at":"2026-03-19T21:35:23.000Z","dependencies_parsed_at":"2026-02-03T21:02:05.573Z","dependency_job_id":null,"html_url":"https://github.com/tentaplane/tentapress","commit_stats":null,"previous_names":["tentaplane/tentapress"],"tags_count":84,"template":false,"template_full_name":null,"purl":"pkg:github/tentaplane/tentapress","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tentaplane%2Ftentapress","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tentaplane%2Ftentapress/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tentaplane%2Ftentapress/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tentaplane%2Ftentapress/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/tentaplane","download_url":"https://codeload.github.com/tentaplane/tentapress/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tentaplane%2Ftentapress/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31292298,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-01T21:15:39.731Z","status":"ssl_error","status_checked_at":"2026-04-01T21:15:34.046Z","response_time":53,"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":["alpinejs","blade","cms","cms-framework","content-management-system","laravel","tailwind","tailwindcss"],"created_at":"2026-01-30T20:05:37.533Z","updated_at":"2026-04-01T21:29:45.980Z","avatar_url":"https://github.com/tentaplane.png","language":"PHP","funding_links":[],"categories":[],"sub_categories":[],"readme":"# TentaPress\n\nAn agency-first publishing platform for landing pages, campaigns, and small sites. TentaPress gives teams a faster way\nto launch, a safer way for clients to edit, and a cleaner path to maintain sites over time.\n\n| Key       | Value      |\n|-----------|------------|\n| Version   | 0.49.0 \u003c!-- x-release-please-version --\u003e |\n| PHP       | 8.2+       |\n| Framework | Laravel 12 |\n| License   | MIT        |\n\n## Quick Start (ZIP + setup script)\n\nThis is the easiest way to get started if you are not planning to develop core code.\n\n1. Download the latest ZIP from [GitHub Releases](https://github.com/tentaplane/tentapress/releases/latest).\n2. Unzip it somewhere on your machine.\n3. Open a terminal in that folder.\n4. Run:\n\n```bash\nphp tentapress.php setup\n```\n\n5. Follow the prompts:\n    - site name\n    - site URL\n    - starter theme install\n    - optional demo homepage\n    - first admin login\n6. Open your admin at `/admin` and sign in.\n\nIf your machine allows executable scripts, this also works:\n\n```bash\n./tentapress.php setup\n```\n\n## Why TentaPress works so well\n\nTentaPress is built for teams that need to move quickly without creating long-term content chaos.\n\n- Fast launch flow: starter setup script, starter theme, optional demo homepage.\n- Structured editing: block-based content that keeps pages consistent and harder to break.\n- Agency-friendly operations: plugin-driven architecture for clear ownership and controlled extension.\n- Laravel-native confidence: modern framework foundations, security defaults, and familiar tooling.\n- Practical publishing model: pages, posts, media, menus, users, SEO, and settings in one admin.\n\nIn short: TentaPress helps teams ship faster today without inheriting a mess tomorrow.\n\n## What the setup script does for you\n\n`tentapress.php setup` automates first-time installation by:\n\n- preparing `.env` and setting `APP_NAME`, `APP_URL`, `APP_ENV=production`, `APP_DEBUG=false`\n- installing PHP dependencies\n- creating app key, running migrations, and linking storage\n- syncing/enabling default plugins and seeding permissions\n- installing/activating a starter theme (optional)\n- optionally creating demo homepage content\n- creating your first super admin user\n\n## Technical Setup and Operations\n\n### Requirements\n\n- PHP 8.2+\n- Composer\n- SQLite/MySQL/PostgreSQL (SQLite is the easiest first run path)\n- Optional for frontend/theme asset builds: Bun, pnpm, or npm\n\n### Common commands\n\n```bash\nphp artisan tp:plugins sync\nphp artisan tp:plugins list\nphp artisan tp:plugins enable --all\n\nphp artisan tp:themes sync\nphp artisan tp:themes list\nphp artisan tp:themes activate tentapress/tailwind\n\nphp artisan tp:users:make-admin\nphp artisan tp:permissions seed\nphp artisan tp:posts:publish-scheduled\n```\n\n### Development commands\n\n```bash\ncomposer dev\nbun --cwd plugins/tentapress/admin-shell run dev\nbun --cwd plugins/tentapress/admin-shell run build\ncomposer test\ncomposer test:filter -- SomeTestName\ncomposer test:refactor-guard\ncomposer test:mutation:critical\n./vendor/bin/pint --dirty\n```\n\n### Testing (Pest, Monorepo)\n\nTentaPress uses Pest at the root and auto-discovers tests across core, plugins, and packages.\n\n- Core tests: `tests/Feature`\n- Root platform contracts: `tests/Feature/Platform` (cross-cutting orchestration/config/archive guarantees)\n- Plugin tests: `plugins/\u003cvendor\u003e/\u003cplugin\u003e/tests/Feature`\n- Package tests: `packages/\u003cvendor\u003e/\u003cpackage\u003e/tests/Feature`\n- Plugin/package tests automatically run with Laravel `RefreshDatabase`.\n- Example plugin feature test: `plugins/tentapress/pages/tests/Feature/HomeRedirectTest.php`.\n- Example package feature test: `packages/tentapress/system/tests/Feature/PluginsListCommandTest.php`.\n- Migration strategy: module feature tests run on sqlite (`:memory:`) with fresh migrations per test execution.\n\nRun all tests from root:\n\n```bash\ncomposer test\n```\n\nValidate a fresh setup:\n\n```bash\ncomposer install\ncomposer test\ncomposer test:filter -- HomeRedirectTest\n```\n\nRun the curated refactor guard subset (root platform contracts + system/users/pages/import/export/static-deploy):\n\n```bash\ncomposer test:refactor-guard\n```\n\nRun mutation testing for critical refactor targets (`system`, `users`, `pages`):\n\n```bash\ncomposer test:mutation:critical\n```\n\nRaise mutation quality gates locally/CI by setting MSI thresholds:\n\n```bash\nTP_MUTATION_MIN_MSI=60 TP_MUTATION_MIN_COVERED_MSI=70 composer test:mutation:critical\n```\n\nCI runs `composer test:refactor-guard` on every push, runs `composer test` on pull requests and pushes to `main`, and\nruns critical mutation tests on pull requests touching `system`, `users`, or `pages`.\n\nRelease archives exclude test sources via `.gitattributes` (`/tests`, `plugins/**/tests`, `packages/**/tests`).\n\n### Third-party plugin discovery\n\nTentaPress discovers plugin manifests (`tentapress.json`) inside allowed Composer vendor namespaces.\n\nAdd namespaces to `config/tentapress.php` (`plugin_vendor_namespaces`), then run:\n\n```bash\nphp artisan tp:plugins sync\n```\n\n## Security\n\nPlease report vulnerabilities privately and do not open public exploit issues.\n\n- Full policy: [`SECURITY.md`](SECURITY.md)\n- Supported versions and disclosure process are documented there.\n\nOperational basics:\n\n- always run HTTPS in production\n- rotate secrets and keep them out of git\n- keep dependencies updated\n- apply least-privilege access for admin and database credentials\n\n## Contributing\n\nContributions are welcome. Keep pull requests small, readable, and documented.\n\n- Contributor guide: [`CONTRIBUTING.md`](CONTRIBUTING.md)\n- Architecture decisions: `docs/adrs/`\n- Product requirement docs: `docs/prds/`\n\nBefore opening a PR:\n\n- format changed PHP files with `./vendor/bin/pint`\n- run relevant migrations and plugin sync\n- update docs when behavior changes\n\n## Vision\n\n- Manifesto: [`docs/vision/MANIFESTO.md`](docs/vision/MANIFESTO.md)\n- Product direction: [`docs/vision/VISION.md`](docs/vision/VISION.md)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftentaplane%2Ftentapress","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ftentaplane%2Ftentapress","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftentaplane%2Ftentapress/lists"}