Scaffold project, data model and artwork
Establish the LLeMbas foundation: FastAPI/Jinja/SQLite layout, the ORM schema, and the original SVG identity. Notable decisions, all recorded in comments at the point they matter: - No Alembic. SQLite only, schema created at startup, so models carry a few columns nothing reads yet (Message.parent_id for branching, content_parts_json for multimodal turns). Adding them later to a live database without migrations is the painful path. - Sessions are server-side rows keyed by a SHA-256 of the cookie value, not JWTs, so logout and bans revoke access immediately. - Upstream API keys are Fernet-encrypted with a key derived from LEMBAS_SECRET_KEY. decrypt() fails soft to "" so rotating the secret degrades to re-entering keys rather than crashing the admin UI. - Artwork is generated by scripts/build_artwork.py rather than hand-drawn per file: the mallorn leaf appears in the icon, favicon, lockup and banner, and one source is the only way those stay in sync. The wordmark is Source Serif 4 (OFL) converted to outlines, because a README banner cannot load a webfont and <text> would render in whatever serif the viewer happens to have. - Icons live in a template partial, not assets/, because same-document <use href="#id"> is universally supported and the cross-document form is not. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,23 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 544.03 112.09"
|
||||
width="544.03" height="112.09" role="img" aria-label="LLeMbas">
|
||||
<title>LLeMbas</title>
|
||||
<!-- Source Serif 4 (SIL OFL 1.1) outlines. The capitals L, L and M spell out
|
||||
LLM and take the accent colour; see scripts/build_artwork.py. -->
|
||||
<style>
|
||||
.base { fill: var(--lembas-ink, #1B1F23); }
|
||||
.accent { fill: var(--lembas-gold, #C9A227); }
|
||||
@media (prefers-color-scheme: dark) {
|
||||
.base { fill: var(--lembas-ink, #EDE6D6); }
|
||||
.accent { fill: var(--lembas-gold, #E0B252); }
|
||||
}
|
||||
</style>
|
||||
<g transform="translate(-5.07 110.15)">
|
||||
<path class="accent" data-char="L" d="M5.07 -96.27 16.12 -94.93C16.57 -83.13 16.57 -66.87 16.57 -53.28V-46.72C16.57 -32.84 16.57 -16.12 16.12 -4.18L5.07 -2.84V0.00H71.64L73.43 -29.10H70.60L61.19 -3.73H32.54C32.09 -15.52 31.94 -32.54 31.94 -46.72V-53.28C31.94 -66.87 32.09 -83.13 32.54 -94.93L43.43 -96.27V-99.10H5.07Z"/>
|
||||
<path class="accent" data-char="L" d="M82.09 -96.27 93.13 -94.93C93.58 -83.13 93.58 -66.87 93.58 -53.28V-46.72C93.58 -32.84 93.58 -16.12 93.13 -4.18L82.09 -2.84V0.00H148.66L150.45 -29.10H147.61L138.21 -3.73H109.55C109.10 -15.52 108.96 -32.54 108.96 -46.72V-53.28C108.96 -66.87 109.10 -83.13 109.55 -94.93L120.45 -96.27V-99.10H82.09Z"/>
|
||||
<path class="base" data-char="e" d="M191.04 -66.27C198.66 -66.27 203.73 -60.30 203.73 -49.10C203.73 -42.54 201.49 -40.30 194.63 -40.30H175.07C176.12 -59.40 183.43 -66.27 191.04 -66.27ZM191.19 1.94C202.39 1.94 211.79 -3.13 217.16 -14.63L215.07 -16.12C210.60 -10.60 204.78 -7.01 196.72 -7.01C184.18 -7.01 174.93 -17.61 174.93 -35.67V-36.87H215.97C216.57 -38.96 216.87 -40.75 216.87 -44.03C216.87 -59.55 206.12 -69.85 190.90 -69.85C174.33 -69.85 159.70 -55.97 159.70 -32.69C159.70 -10.75 173.58 1.94 191.19 1.94Z"/>
|
||||
<path class="accent" data-char="M" d="M228.21 0.00H256.12V-2.84L244.18 -4.18V-87.31L275.22 0.00H280.75L311.79 -88.36V-46.72C311.79 -32.84 311.64 -15.97 311.19 -4.18L301.04 -2.84V0.00H338.66V-2.84L327.76 -4.18C327.31 -15.97 327.16 -32.84 327.16 -46.72V-53.28C327.16 -66.87 327.31 -83.13 327.76 -94.93L338.66 -96.27V-99.10H311.19L283.73 -22.09L256.57 -99.10H228.21V-96.27L239.85 -94.78V-4.18L228.21 -2.84Z"/>
|
||||
<path class="base" data-char="b" d="M348.66 0.00 372.84 1.64V-9.25C377.91 -1.19 384.63 1.94 391.94 1.94C407.91 1.94 419.85 -11.94 419.85 -35.67C419.85 -58.21 408.36 -69.85 393.43 -69.85C384.33 -69.85 377.31 -64.78 372.84 -57.16V-78.81L373.43 -108.66L371.79 -110.15L348.06 -103.88V-101.49L358.36 -99.10V-31.04C358.36 -23.28 358.21 -12.39 357.91 -4.18L348.66 -2.84ZM387.16 -62.24C397.01 -62.24 404.48 -54.18 404.48 -34.78C404.48 -14.93 396.87 -5.82 387.46 -5.82C381.49 -5.82 377.61 -7.61 372.84 -12.69V-53.88C376.87 -58.96 381.64 -62.24 387.16 -62.24Z"/>
|
||||
<path class="base" data-char="a" d="M481.49 1.64C488.21 1.64 492.39 -2.09 494.63 -7.46L492.84 -8.96C490.45 -6.27 489.10 -5.22 486.87 -5.22C484.33 -5.22 482.84 -6.87 482.84 -11.64V-44.93C482.84 -62.24 475.97 -69.85 460.75 -69.85C445.67 -69.85 434.93 -62.84 433.28 -52.69C434.03 -48.66 435.97 -46.42 440.00 -46.42C444.03 -46.42 447.46 -49.10 448.21 -55.52L449.85 -64.93C451.79 -65.52 453.58 -65.82 455.67 -65.82C464.78 -65.82 468.21 -61.19 468.21 -46.57V-41.34C462.54 -40.00 457.76 -38.66 454.48 -37.46C435.82 -31.49 430.75 -24.18 430.75 -14.93C430.75 -4.03 438.36 1.94 448.36 1.94C456.12 1.94 462.39 -0.90 468.36 -8.66C469.40 -2.09 473.73 1.64 481.49 1.64ZM445.07 -18.36C445.07 -24.93 448.06 -30.30 458.21 -34.78C460.15 -35.67 463.58 -36.87 468.21 -38.36V-11.64C463.28 -7.61 460.00 -6.72 455.52 -6.72C449.55 -6.72 445.07 -10.15 445.07 -18.36Z"/>
|
||||
<path class="base" data-char="s" d="M523.43 1.94C540.00 1.94 549.10 -6.42 549.10 -19.40C549.10 -31.49 540.15 -35.97 531.34 -39.70L527.16 -41.49C519.85 -44.63 513.58 -47.91 513.58 -55.37C513.58 -61.94 518.36 -66.57 526.72 -66.57C530.45 -66.57 533.43 -66.12 536.12 -64.78L542.54 -47.31H545.07L545.67 -64.63C539.85 -68.06 534.18 -69.85 526.72 -69.85C510.75 -69.85 502.69 -60.90 502.69 -49.25C502.69 -37.46 511.19 -32.84 519.70 -29.25L523.88 -27.46C531.19 -24.33 537.61 -21.19 537.61 -13.58C537.61 -6.42 532.54 -1.19 523.43 -1.19C518.81 -1.19 515.52 -1.79 512.24 -2.99L505.52 -22.24H503.13L502.24 -3.73C508.96 0.00 515.07 1.94 523.43 1.94Z"/>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 4.2 KiB |
Reference in New Issue
Block a user