Write together. Publish boldly. Find your readers.
DraftCircle is a social writing platform where authors create, publish, discuss, and discover books together.
The project is evolving from a complete digital library foundation into a community-centered product for writers and readers. Its current release already provides discovery, digital reading, ratings, threaded discussions, notifications, moderation, and administration. The next product phase will introduce author profiles, book creation, drafts, chapters, publishing workflows, follows, feeds, and collaborative feedback.
DraftCircle should make writing feel social without making it noisy.
- Writers can develop books from early drafts to published editions.
- Readers can discover stories, follow authors, react, discuss, and provide useful feedback.
- Communities can form around genres, books, and shared creative interests.
- Authors retain a clear workspace while gaining a direct relationship with readers.
- Searchable catalog with categories, formats, availability, and recommendations.
- Responsive home, catalog, book details, and dedicated digital reader.
- Reading progress, ratings, comments, replies, and comment voting.
- Personalized recommendations with explicit cookie consent.
- User profiles and preferences.
- Persistent in-app and email notifications.
- Real-time notification delivery through Laravel Reverb.
- Comment moderation, blocked-word rules, soft deletion, and staff tools.
- Reservations, loans, returns, overdue processing, and fines.
- Administrative dashboards, reports, settings, users, books, and moderation.
- Redis-backed queues and cache, Horizon, Telescope, scheduled jobs, and health checks.
- English and Brazilian Portuguese localization, with English as the default language.
The existing library domain remains useful as the discovery and reading layer. Planned social writing capabilities include:
- Public author profiles, follows, and social graphs.
- Personal writing studios with books, chapters, drafts, and revision history.
- Publishing controls for private drafts, beta readers, serialized releases, and completed books.
- Activity feeds for followed authors, new chapters, comments, and recommendations.
- Collaborative feedback, annotations, writing circles, and co-author workflows.
- Creator analytics, reading lists, collections, and community discovery.
- PHP 8.3 and Laravel 11
- Inertia.js 2
- MySQL 8
- Redis 7 with Predis
- Laravel Horizon, Reverb, Sanctum, Socialite, and Telescope
- Vue 3 with Composition API
- TypeScript
- Vite
- Tailwind CSS
- Pinia
- Headless UI and Lucide icons
- Docker Compose and Nginx
- PHPUnit 11 and ParaTest
- Larastan/PHPStan level 9
- Laravel Pint
- ESLint, Prettier, and vue-tsc
- GitHub Actions, Husky, lint-staged, and commitlint
DraftCircle organizes business behavior into explicit, testable use cases.
HTTP routes
-> middleware and policies
-> controllers
-> application services
-> actions
-> Eloquent models
-> events, listeners, notifications, cache, and queues
- Controllers translate HTTP requests into application calls.
- Services coordinate related capabilities.
- Actions implement small use cases.
- DTOs and enums keep application boundaries typed.
- Policies and form requests centralize authorization and validation.
- Events and queued listeners isolate side effects.
- Observers keep cached views consistent.
- Docker with Docker Compose
- Git
cp .env.example .env
docker compose build
docker compose up -d
docker compose exec app php artisan key:generate
docker compose exec app php artisan migrate:fresh --seed --forceDefault local URLs:
| Service | URL |
|---|---|
| DraftCircle | http://localhost |
| Mailpit | http://localhost:8025 |
| Reverb | ws://localhost/app/{key} |
Default seeded accounts:
| Role | Login | Password |
|---|---|---|
| Administrator | admin@draftcircle.local |
password |
| Editor | editor@draftcircle.local |
password |
| Writer | writer1@draftcircle.local or STU0001 |
password |
docker compose exec app composer checkThis runs Pint, PHPStan, and the parallel PHPUnit suite.
docker compose exec vite npm run lint
docker compose exec vite npm run builddocker compose exec app php artisan test
docker compose exec app php artisan test --parallelTests force SQLite in memory, array-backed cache and sessions, synchronous queues, and disabled Telescope so they never modify development services.
docker compose exec app php artisan library:send-overdue-notifications
docker compose exec app php artisan library:clean-expired-reservations
docker compose exec app php artisan library:generate-report --period=weekly
docker compose exec app php artisan library:process-pending-fines
docker compose exec app php artisan library:warm-cacheThese command names remain stable while the product evolves because they represent the current circulation domain rather than the DraftCircle brand.
Create .env.production from .env.production.example, replace every secret, and run:
docker compose --env-file .env.production -f compose.prod.yaml build
docker compose --env-file .env.production -f compose.prod.yaml run --rm migrate
docker compose --env-file .env.production -f compose.prod.yaml up -dMigrations are explicit and never run automatically during container startup. Back up the MySQL and application storage volumes before significant updates.
English is the default language. Brazilian Portuguese remains available through the locale
switcher. Application text must use trans() and every translation key must exist in both
lang/en and lang/pt_BR.
- CSRF protection, encrypted sessions, authorization policies, and rate limiting.
- Optional secure cookies and same-site controls.
- Explicit personalization and analytics cookie consent.
- Personal data erasure workflow.
- Queue, observability, and administration tools restricted by role.
Developed by vwinck-dev.
DraftCircle is open-source software licensed under the MIT license.