Frontend routing
Public URLs, blog, pages, previews, and feeds.
Public routes are defined in routes/web.php (plus included files). Order matters: specific routes must be registered before the static catch-all.
Main routes
| Method | URI | Name | Purpose |
|---|---|---|---|
| GET | / |
home |
Home page |
| GET | /feed.xml |
feed.rss |
RSS feed |
| GET | /sitemap.xml |
sitemap |
XML sitemap |
| GET | /preview/post/{post} |
preview.post |
Preview post (middleware: preview allowed) |
| GET | /preview/page/{page} |
preview.page |
Preview page |
| POST | /locale/{locale} |
locale.switch |
Switch locale (en or id) |
| GET | /blog |
blog |
Blog index |
| GET | /blog/{slug} |
blog.post |
Single post |
| GET | /pages/{slug} |
page |
Database page by slug |
Theme assets
| GET | themes/{theme}/{path} | Serves files from themes/{theme}/ with path traversal protection |
Static pages (catch-all)
| GET | /{page} | static.page | Theme Blade templates for static pages (e.g. /about → about, /download → marketing download page) |
Constraint: page must match [a-zA-Z0-9_-]+. This route is last so it does not shadow /blog, /admin, etc.
Admin & auth
routes/admin.php, routes/auth.php, and routes/settings.php are included before the static catch-all so /admin and login routes work.
Previews
Preview routes use middleware to ensure only allowed users (e.g. editors) can see unpublished content. Configure policies/middleware accordingly.