diff options
| author | gramanas <grm@eyesin.space> | 2026-09-12 11:24:17 +0300 |
|---|---|---|
| committer | gramanas <grm@eyesin.space> | 2026-09-12 11:24:17 +0300 |
| commit | 3eb04b1a2bdf9e53231fe862cfd76327371a9741 (patch) | |
| tree | b38b2d82a47233fd8e0bb18c59e4a8f3dd2412d7 /internal/web/templates/blog | |
| download | blogspace-3eb04b1a2bdf9e53231fe862cfd76327371a9741.tar.gz blogspace-3eb04b1a2bdf9e53231fe862cfd76327371a9741.tar.bz2 blogspace-3eb04b1a2bdf9e53231fe862cfd76327371a9741.zip | |
Initial multi-tenant blog host
Go + Postgres application serving a management dashboard on the base
domain and one public blog per subdomain. Markdown posts organised in
pages, form-based theme customisation, image uploads stored in Postgres,
JWT cookie sessions with CSRF, superadmin user management, RSS feeds.
Docker/compose deployment and a Makefile-driven dev environment with
seed data.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Sd8UPWrvyYCLj97JexNw3A
Diffstat (limited to 'internal/web/templates/blog')
| -rw-r--r-- | internal/web/templates/blog/404.html | 5 | ||||
| -rw-r--r-- | internal/web/templates/blog/page.html | 19 | ||||
| -rw-r--r-- | internal/web/templates/blog/post.html | 8 |
3 files changed, 32 insertions, 0 deletions
diff --git a/internal/web/templates/blog/404.html b/internal/web/templates/blog/404.html new file mode 100644 index 0000000..b0aa6a9 --- /dev/null +++ b/internal/web/templates/blog/404.html @@ -0,0 +1,5 @@ +{{define "title"}}Not found · {{.Blog.Title}}{{end}} +{{define "content"}} +<h1>Not found</h1> +<p>There is nothing at this address. <a href="/">Back to the front page.</a></p> +{{end}} diff --git a/internal/web/templates/blog/page.html b/internal/web/templates/blog/page.html new file mode 100644 index 0000000..c1fe726 --- /dev/null +++ b/internal/web/templates/blog/page.html @@ -0,0 +1,19 @@ +{{define "title"}}{{if not .Data.page.IsHome}}{{.Data.page.Title}} · {{end}}{{.Blog.Title}}{{end}} +{{define "content"}} +{{if not .Data.page.IsHome}}<h1 class="page-title">{{.Data.page.Title}}</h1>{{end}} +{{if .Data.page.IntroHTML}}<div class="intro">{{html .Data.page.IntroHTML}}</div>{{end}} +{{range .Data.posts}} +<article class="post"> + <h2 class="post-title"><a href="/{{.PageSlug}}/{{.Slug}}">{{.Title}}</a></h2> + <p class="post-date">{{date .CreatedAt}}</p> + <div class="post-body">{{html .BodyHTML}}</div> +</article> +{{else}}{{if not .Data.page.IntroHTML}}<p class="muted">Nothing here yet.</p>{{end}}{{end}} +{{if gt .Data.lastPage 1}} +<div class="pager"> + {{if gt .Data.pageNum 1}}<a href="{{.Data.base}}/?p={{sub .Data.pageNum 1}}">← Newer</a>{{end}} + <span>Page {{.Data.pageNum}} of {{.Data.lastPage}}</span> + {{if lt .Data.pageNum .Data.lastPage}}<a href="{{.Data.base}}/?p={{add .Data.pageNum 1}}">Older →</a>{{end}} +</div> +{{end}} +{{end}} diff --git a/internal/web/templates/blog/post.html b/internal/web/templates/blog/post.html new file mode 100644 index 0000000..83ce782 --- /dev/null +++ b/internal/web/templates/blog/post.html @@ -0,0 +1,8 @@ +{{define "title"}}{{.Data.post.Title}} · {{.Blog.Title}}{{end}} +{{define "content"}} +<article class="post single"> + <h1 class="post-title">{{.Data.post.Title}}</h1> + <p class="post-date">{{date .Data.post.CreatedAt}} · <a href="{{if .Data.page.IsHome}}/{{else}}/{{.Data.page.Slug}}{{end}}">{{.Data.page.Title}}</a></p> + <div class="post-body">{{html .Data.post.BodyHTML}}</div> +</article> +{{end}} |
