main
|
Last change
on this file since 6401681 was 3b4095f, checked in by roboburr <roboburr@…>, 2 months ago |
|
feat(seo): og:image light/dark override setting
The auto-generated share card followed the site's default theme (1.2.0); Admin →
SEO now has an explicit override: Auto (follow site theme) / Light / Dark.
- src/config/database.js — sites.og_theme column (NULL = auto).
- src/services/OgImageService.js — og_theme wins over theme_override when set.
- src/routes/og.js — select og_theme for the card route.
- src/routes/admin-seo.js — save og_theme (validated to light/dark, else auto).
- src/views/pages/admin-seo.ejs — select under the share-image field.
- src/services/i18n.js — aseo.og_theme* (nl/en/de).
- CHANGELOG(.nl/.de).md — under Added.
Closes prutfolio-src-krm.
Co-Authored-By: Claude <noreply@…>
|
-
Property mode
set to
100644
|
|
File size:
982 bytes
|
| Line | |
|---|
| 1 | /**
|
|---|
| 2 | * GET /og/:slug.png — themed Open Graph card for a site (1200x630 PNG).
|
|---|
| 3 | * Generated from the site's palette + accent (see OgImageService), cached.
|
|---|
| 4 | * Used as the default og:image so every site has a branded social preview.
|
|---|
| 5 | */
|
|---|
| 6 | import express from 'express';
|
|---|
| 7 | import db from '../config/database.js';
|
|---|
| 8 | import { ogImageFor } from '../services/OgImageService.js';
|
|---|
| 9 |
|
|---|
| 10 | const router = express.Router();
|
|---|
| 11 |
|
|---|
| 12 | router.get('/:slug.png', (req, res) => {
|
|---|
| 13 | let site;
|
|---|
| 14 | try {
|
|---|
| 15 | site = db.prepare(
|
|---|
| 16 | 'SELECT slug, title, tagline, description, palette, accent, theme_override, og_theme FROM sites WHERE slug = ?'
|
|---|
| 17 | ).get(req.params.slug);
|
|---|
| 18 | } catch { /* db error → 404 below */ }
|
|---|
| 19 | if (!site) return res.status(404).end();
|
|---|
| 20 |
|
|---|
| 21 | const png = ogImageFor(site);
|
|---|
| 22 | if (!png) return res.status(404).end(); // resvg unavailable → no card (graceful)
|
|---|
| 23 |
|
|---|
| 24 | res.set('Content-Type', 'image/png');
|
|---|
| 25 | res.set('Cache-Control', 'public, max-age=86400');
|
|---|
| 26 | return res.send(png);
|
|---|
| 27 | });
|
|---|
| 28 |
|
|---|
| 29 | export default router;
|
|---|
Note:
See
TracBrowser
for help on using the repository browser.