changelog.md
Changelog
Notable changes to ReadySite.
Current
Database
Collection[E]generic repository with CRUD operations- Four engine types: Auto, Memory, Local, Remote
- Turso/libSQL remote replicas with local sync
- Automatic table creation and schema migration
- Index and unique index support via
WithIndex/WithUniqueIndex
Application
- MVC framework with HTMX/HATEOAS
- Controller pattern with value-receiver request isolation
- Bouncers (route guards) for authentication
- SSE streaming with
c.Stream(w) - Template functions accessible via controller name
- Email sending with Resend and logger providers
- TLS support via
TLS_CERT/TLS_KEYenvironment variables
Frontend
- React islands via esbuild bundler
- Hot Module Replacement (HMR) in development
{{render "Component" props}}template helper- Automatic bundling on startup
Platform
- DigitalOcean, AWS, GCP providers
infra.jsondeclarative infrastructure configuration- CLI tools:
cmd/launch,cmd/connect,cmd/publish - Volume management with persistent storage
- Health checks with configurable timeouts
Assistant
- OpenAI and Anthropic providers
- Fluent
ToolBuilderAPI for tool definitions - SSE streaming with event types
- Mock provider for testing
ToolCall.ParseArguments()for type-safe argument extraction
Website CMS
- 14 controllers (pages, collections, AI chat, files, etc.)
- AI assistant with 50+ tools
- PocketBase-inspired collections with JSON schemas
- Rule-based access control (ACL)
- Mutation tracking with undo/redo
- File upload with MIME validation and size limits
- Real-time updates via SSE
Hosting
- Passwordless magic link authentication
- Docker container provisioning per site
- Caddy reverse proxy with automatic TLS
- React Flow site management dashboard
- Free and Pro plans with persistent volumes
- Real-time launch progress via SSE
Migration Notes
Database Engine Selection
The engines.NewAuto() function selects engines based on environment variables. If you're migrating from explicit engine selection:
// Old: explicit engine
db := engines.NewLocal("/data/app.db")
// New: auto selection via environment
// Set DB_PATH=/data/app.db
db := engines.NewAuto()
Controller Base Type
Controllers embed application.BaseController (not application.Controller):
type MyController struct {
application.BaseController // Correct
}
Template Access
Controller methods in templates use the controller name directly:
{{home.Message}} <!-- Correct -->
{{.home.Message}} <!-- Wrong -->