Sidecar-less page bundles whose directory ends in a MediaType extension
(.txt/.css/.xml/.json/.js) now render raw (no HTML layout, autoescape off),
are served with that extension's Content-Type, and cache as a flat file
(public/cache/<path>) so Apache serves them directly via a new .htaccess
rule. They're excluded from the content index.
CSS becomes one of these: novaconium/pages/css/main.css/ holds index.twig
({{ sass('main.sass') }}), main.sass, and _colors.sass. App\SassExtension's
sass() Twig function resolves the entry file through the overlay and shells
out to Dart Sass on a cache miss; Lib\SassCompiler wraps the CLI. This
drops the committed App/css/main.css build artifact and the public/css
bind mount. Override styling by copying the whole bundle to App/pages/.
Also ship robots.txt and humans.txt as framework bundles, and drop the
php -S dev router (public/router.php) - Docker/Apache only now.
New: novaconium/src/MediaType.php, SassExtension.php, lib/SassCompiler.php.
Moved: novaconium/sass/ -> novaconium/pages/css/main.css/ (+ App/sass merged).
Docs: AGENTS.md, new /admin/docs/text-pages, and styling/caching/docker/
design-notes/getting-started/project-layout/config docs updated.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_018Q9cAXC9xcXYnmP7qjsnw7
57 lines
2.2 KiB
Markdown
57 lines
2.2 KiB
Markdown

|
|
|
|
A Hugo-flavored PHP framework. Routes are directories on disk, pages render with [Twig](https://twig.symfony.com/), and any page that needs real logic gets an optional PHP "sidecar" file. Pages without a sidecar are pre-rendered once and served as static HTML straight from Apache afterwards.
|
|
|
|
For a full tour of what's included — routing, sidecars, caching, admin auth, access control, media manager, database, search, RSS, and more — see the [Novaconium docs](https://www.4lt.ca/novaconium).
|
|
|
|
This project is currently in beta testing. The issue tracker is at https://git.4lt.ca/4lt/novaconium/issues — email nova@4lt.ca for a login.
|
|
|
|
## Getting started
|
|
|
|
### Webmasters
|
|
|
|
```bash
|
|
PROJECTDIR="${PROJECTDIR:-/data}"
|
|
mkdir -p "$PROJECTDIR"/novaconium/{cache,uploads,data}
|
|
|
|
docker pull git.4lt.ca/4lt/novaconium:2.0.0-beta
|
|
|
|
docker run -d \
|
|
--name novaconium \
|
|
-p 8080:80 \
|
|
-v "$(pwd)/$PROJECTDIR"/novaconium/App:/var/www/html/App \
|
|
-v "$(pwd)/$PROJECTDIR"/novaconium/cache:/var/www/html/public/cache \
|
|
-v "$(pwd)/$PROJECTDIR"/novaconium/uploads:/var/www/html/public/uploads \
|
|
-v "$(pwd)/$PROJECTDIR"/novaconium/data:/var/www/html/data \
|
|
git.4lt.ca/4lt/novaconium:2.0.0-beta
|
|
|
|
```
|
|
|
|
You should also add a favicon.ico to your PROJECTDIR.
|
|
|
|
You can find example PROJECTDIR files and directory structure in: https://git.4lt.ca/4lt/novaconium/src/branch/v2/App
|
|
|
|
`$PROJECTDIR/novaconium/data` is for your sqlite database and will be created from scratch when running novaconium.
|
|
|
|
Open http://localhost:8080/ in your browser.
|
|
|
|
### Developers
|
|
|
|
```
|
|
docker buildx build --no-cache -t git.4lt.ca/4lt/novaconium:2.0.0-beta --load .
|
|
docker login git.4lt.ca -u <username>
|
|
docker push git.4lt.ca/4lt/novaconium:2.0.0-beta
|
|
|
|
docker compose up -d
|
|
```
|
|
|
|
### Create A User
|
|
|
|
```
|
|
docker exec -it novaconium php novaconium/bin/create-admin-user.php <username> <email>
|
|
```
|
|
|
|
## Third-party
|
|
|
|
[Twig](https://twig.symfony.com/) is vendored in source form under `novaconium/vendor/twig/` (no Composer — see `/admin/docs/upgrading-twig` for how to upgrade it). It's BSD-3-Clause licensed; the full license text ships alongside it at `novaconium/vendor/twig/LICENSE`.
|