Kagels Trading

How this site is built to look

The rules, the strategy and the current state of the design, with the colours, type, spacing and components behind them. Values are read from the files. As of 30 September 2026.

Start here

This is the English site, kagels-trading.com, built new in Astro. Pages are plain files in this repository and the whole site is generated at build time, so there is no theme, no page builder and no database.

Design strategy: a modern look that comes from trading

Karsten set the direction on 29 September 2026. The site should look modern and minimal, but not old-fashioned, and not like the template that almost every site built with AI tools shares. The work runs in small steps, and Karsten decides after each one.

Step 1: say what is not allowed

Done on 29 and 30 September 2026. The list is under Rules on this page and in AGENTS.md, so no work session brings these elements back. It changes no page by itself.

Step 2: a look taken from the charts

Started on 2 October 2026 with the homepage sample (draft V2 "Chart Hero"), approved by Karsten the same day. The idea is to take the design from the work itself instead of from a template. Forecasts and blog follow.

Order

  1. The "not allowed" list. Done.
  2. The homepage as a sample, with before and after screenshots. Karsten decides. Done: approved on 2 October 2026.
  3. Only then the forecasts and the blog.

Exception, 2 October 2026: Karsten moved step 3, the left sidebar, ahead of the homepage sample. It is built in today's look; when step 2 comes, only font and colours change, not the layout.

Step 3: left sidebar for forecasts and blog

Built on 2 October 2026 (SideNav.astro). There is only one sidebar, on the left; it replaces the contents list on the right.

This page is updated in the same commit as every design change. The plan itself is in Karsten's office notes, ~/Project-office/decisions-and-plans.md.

Decisions so far

DateDecision
14 Sep 2026The first design is the base and grows in small steps. Drafts A to C (newspaper, chart desk, letter) rejected as too old-fashioned
17 Sep 2026Chart background #0d1b33, after comparing black, navy and a lighter blue
26 Sep 2026New logo and favicon. Contents list and back-to-top button on posts and forecasts. Topic pages. Chart at the start of each forecast section
28 Sep 2026First summary box in pastel with badges rejected as "typical SaaS"
29 Sep 2026Summary box and FAQ box in dark blue, no labels above their headings. Forecast header black on white like the blog, at most one dark block per page area. The design strategy and the "not allowed" list
29 Sep 2026Five homepage drafts made (V1 to V5), local only. No decision yet
30 Sep 2026Two-tone H2. Forecast summaries with exactly four short items. Bull case cards light green, bear case cards light red
1 Oct 2026Homepage draft V2 "Chart Hero" chosen as the base for the sample
2 Oct 2026Homepage sample from draft V2 approved and live
2 Oct 2026IBM Plex as the font of the whole site
8 Oct 2026Back-to-top button without shadow, with a thin white ring
7 Oct 2026Prop trading in the step 2 look; no page keeps its own look any more (Karsten: "house standard with 3 pixels")
6 Oct 2026Search in the step 2 look: fields and button with 3px corners, results box without shadow, result type in the grey line instead of an uppercase label
3 Oct 2026About page in the step 2 look: timeline as rows with the year in Plex Mono, team without frames, round team photos
2 Oct 2026Forecast overview in the step 2 look: no dark box, facts as a sentence, text links instead of chips
2 Oct 2026Blog in the step 2 look: no labels above headings, topic guides as rows, author box without frame, 3px corners
2 Oct 2026Forecasts in the step 2 look (Nasdaq as sample): no label above the headline, price ladder with level colours, lists instead of cards, 3px corners
2 Oct 2026Left sidebar on forecasts and blog posts, before the homepage sample. Menu item "Topics"

Where the design stands today

The site is live on kagels-trading.com since 20 September 2026. This is what a reader sees now, page type by page type.

Page typeWhat it looks like now
HomepageWhite page, no dark box: headline, author line with a small photo and two buttons left, the Nasdaq yearly chart right with open, high and low between thin lines. Then the four latest chart updates as real charts, three principles as lines, the latest articles as a list, all topics with reader tasks, all forecasts grouped by market with dates. IBM Plex, 3px corners, buttons in chart navy
ForecastsHeader black on white, headline in chart navy, no label above it. Summary in a dark box with four items on thin lines, no cards inside. Each section starts with its chart, then the text, then the levels as a price ladder on thin lines. "More forecasts" as lists by market with dates. Sidebar with all markets on the left from 1280px. Scenario cards in light green and light red. FAQ box at the end
Forecast overviewWhite header with the facts as one sentence, a jump bar of text links with counts on thin lines, "Latest update" with the lead chart, cards with chart thumbnails grouped by asset class (3px)
Blog postsBlack on white. Summary box and FAQ box in dark blue, two-tone H2, sidebar with all topics and the post's sections on the left from 1280px, author box without a frame (round photo, thin lines) directly under the text, then "More … guides" as rows on thin lines
Blog and topic pagesA list of posts under "Browse by topic"; topic pages list the guides as rows on thin lines, the reader's task in navy on the left
Text pagesAbout, contact, imprint, privacy, how we work: plain text column

Where the site still breaks the rules

The "not allowed" list is newer than most of the site. These places still use a banned element. They are changed in step 2, starting with the homepage, not one by one in between.

RuleWhere
Labels above headlinesNone left (homepage, forecasts, blog, forecast overview, search and prop trading cleared on 2 to 7 October 2026)
Coloured left bordersNone left (homepage, forecast range rows, about page timeline and prop trading notice cleared on 2 to 7 October 2026)
Numbered cardsNone left (homepage cleared on 2 October 2026)
Rows of big numbersNone left (homepage and forecast overview cleared on 2 October 2026)
Pills and chipsNone left (forecast overview chips, search fields and prop trading tags and bars cleared on 2 to 7 October 2026)
Soft shadowsNone left (search results box cleared on 6 October 2026, back-to-top button on 8 October 2026: a thin white ring instead of a shadow)
Big rounded cornersNone left. Every page uses 3px since 2 to 7 October 2026
Gradients, glow, icons, dot backgroundsNone found

Checked in the source files on 30 September 2026. Round things that really are round (the portrait, the back-to-top button, the lightbox close button, the small markers on charts) are allowed.

Drafts waiting for a decision

Five homepage drafts from 29 September 2026, with the same content and colours as today. They are local files and not published, in ~/Claude/builds/2026-09/design-varianten-taste/. They were made before the "not allowed" list, so each has to be checked against it.

DraftIdeaFont
V1 RefinedToday's page cleaned up, more space. The smallest changePublic Sans
V2 Chart heroWhite hero with the yearly chart as the big pictureIBM Plex Sans, numbers in Plex Mono
V3 Forecast boardShort navy band, then the forecasts first, as chart tilesSource Sans 3
V4 Track recordLarge portrait and a timeline of real datesFigtree
V5 BentoThe first screen as one grid of tiles. The most modernGeist

Colour

Six colour variables, declared once in src/layouts/Base.astro, used everywhere. The chips fill from the variables themselves.

Colours that are not variables yet

These colours are written directly into the components that use them. They are part of the look, so they belong here even though they do not have a name yet. The chart background also lives in TradingView and is baked into every exported chart.

ValueWhereWhat it does
#b9ccffHomepage hero, summary boxLabels and links on dark blue
#dbe4ffHomepage hero, summary boxRunning text on dark blue
#084ec5FAQ boxThe small "Q" in front of each question (the logo blue)
#eef7f0, heading #1d6b34Forecast scenario cardsBull case card, light green
#fcf0f0, heading #a12a2aForecast scenario cardsBear case card, light red
#e6ecffHomepage buttonHover state of the white button on dark blue
#f4f6faTables in forecasts and postsHeader row background

Contrast

Text has to stay readable, so these are the pairs the site actually uses, measured against the WCAG rule of 4.5:1 for normal text.

PairRatioVerdict
#111111 on white18.88:1Body text, passes
#555555 on white7.46:1Secondary text, passes
White on #0f2a5c13.94:1Hero copy, passes
#b9ccff on #0f2a5c8.73:1Hero links, passes
#dbe4ff on #0f2a5c10.99:1Hero text, passes
White on #0d1b3317.19:1Summary box heading, passes
#dbe4ff on #0d1b3313.55:1Summary box text, passes
#b9ccff on #0d1b3310.76:1Summary box links, passes
#0f2a5c on white13.94:1Figures and links on light, passes

Type

One family since 2 October 2026: IBM Plex Sans, with the system stack as fallback (system-ui, -apple-system, 'Segoe UI', Roboto, Arial, sans-serif). Loaded in Base.astro from the packages@fontsource/ibm-plex-sans and@fontsource/ibm-plex-mono, Latin only: weights 400, 500, 600 and 700, italic 400 and 700. IBM Plex Mono 500 for prices in a column (homepage). Body text is 1.125rem with a line height of 1.6.

Sizes are set per page rather than in one scale, so the same level can differ between a text page and a forecast. These are the sizes in use.

WhereLevelSize
Homepage heroh1clamp(2.1rem, 5vw, 3.4rem), line height 1.15
Forecast heroh1clamp(2rem, 5vw, 3rem), line height 1.15
Text pagesh1clamp(2rem, 5vw, 2.8rem), line height 1.15
Homepage and forecastSection h21.9rem
Text pagesh21.4rem
All h2 in the page bodyh2line height 1.2, letter spacing −0.015em, balanced lines; after the first colon regular weight in navy #0f2a5c (white inside dark boxes)
Cards and tables of contentsh31.2rem, homepage cards 1.25rem
Lead paragraphp1.3rem, forecast hero 1.25rem
Label above a headline (not allowed any more, still on some pages)p0.95rem, weight 600, letter spacing 0.08em
Captions, meta, breadcrumbsp0.95rem to 1rem

Prices and price levels always use font-variant-numeric: tabular-nums, so the digits line up in a column. How a price is written (decimals, currency sign, points) is decided in src/lib/prices.ts, not in the markup.

Layout and spacing

ValueWhat it does
1100px--content-width, the width of the page, centred; 1360px on forecasts from 1280px (left sidebar)
2rem 1.5remPadding around the main column, 2.5rem on top from 1024px up
70chReading column for running text
60chLead paragraph under a headline
22ch to 24chHeadline in a hero box, so it breaks into two or three lines
1remGap in every card grid
1px solid #e5e5e5Every border on the site

Corners

Every page uses 3px since 7 October 2026, when prop trading followed the homepage, forecasts, blog, forecast overview, about page and search. Only real round things stay round: portrait photos and the back-to-top button.

The target is 2 to 4px (strategy step 2). The homepage uses 3px since 2 October 2026, and so do the forecasts, the blog, every chart and the summary and FAQ boxes; the remaining pages follow when step 2 reaches them. Until then, new elements there take the value of their neighbours, so a page does not end up with a mix.

Grids

Card rows are repeat(auto-fit, minmax(...)) with a minimum between 200px and 260px, so they fold from three columns to two to one without a media query. Only the layouts that carry a photo or a sidebar switch at 1024px and 700px.

Components

Fourteen components, two layouts, two shared stylesheets and three markdown plugins that shape how posts look. Build with these before writing anything new.

FileWhat it is
Base.astroThe frame of every page: head, structured data, header, footer. Title and description are required
Page.astroText pages and blog posts. Has a side column (slot aside) for the contents list
Header.astroLogo and navigation, one hairline underneath
Footer.astroLegal links and the year, set automatically
Breadcrumbs.astroThe trail above the headline, also reported to Google
ChartFigure.astroEvery chart on the site. Image, caption, and the click that opens it larger
Lightbox.astroThe enlarged chart: a <dialog> that closes on click, Escape or the round button
LevelList.astroSupport and resistance as a price ladder on thin lines, with a short level-colour line before each price
ForecastCards.astro"More forecasts" under each forecast: lists by market with the update date, the forecast's own group first
AuthorBox.astroRound photo, "Written by" with name, role, bio and profile links under an article, between thin lines
ExternalLink.astroA link that leaves the site. Opens in a new tab and carries rel="noopener"
TableOfContents.astro"Contents" and "On this page" from four H2 sections up, as a box to open above the text below 1280px
SideNav.astroLeft sidebar from 1280px: all markets or all topics, the current one bold and underlined, its sections underneath, the current section marked while reading. Below 1280px a box to open at the top
BackToTop.astroThe round button that jumps back to the top
TopicGuides.astroRows on thin lines on topic pages and under posts: the reader's task in navy, then title and one sentence
ArticleFigures.astroScreenshots with numbered explanations in posts, placed with <!-- figure:id -->
styles/section-boxes.cssThe summary box and the FAQ box in posts and forecasts
styles/graphics.cssDecision helpers, price bars and step graphics in posts
lib/section-boxes-plugin.mjsTurns an H2 "… in 30 seconds" into the summary box and an H2 "Frequently asked questions …" or "FAQ …" into the FAQ box
lib/split-heading.mjsSplits an H2 at the first colon for the two-tone heading
lib/external-links-plugin.mjsOpens every external link in markdown in a new tab

Patterns

The shapes that carry almost every page. They are shown here as they are built, not as pictures of themselves. Patterns marked "on the way out" break a rule and are replaced in step 2.

Two-tone H2

Gold forecast for this week: the March range holds

Since 30 September 2026 in posts and forecasts. The part before the first colon is bold black, the rest regular in navy #0f2a5c. Tight line height and balanced lines. New H2 are best written as "Topic: statement".

Summary box

Gold price forecast in 30 seconds

  • Price $3,642, above the March range.
  • Next resistance at $3,700.

The first H2 of a post or forecast, "… in 30 seconds", becomes this box on its own. Dark blue, white and light blue only, no label above the heading. Forecasts show exactly four short items: price now, short term, key support, next target.

FAQ box

Frequently asked questions about gold

Where is the next support?

At $3,560, the low of the March range.

How often is this forecast updated?

After every larger move, with new charts.

A dark heading strip, then light questions with fine lines between them and a small "Q". Made from an H2 "Frequently asked questions …" or "FAQ …".

Scenario cards

Bull case

A close above $3,700 opens the way to $3,790.

Bear case

Below $3,560 the March range fails.

In forecasts, recognised by the heading: "Bullish …" or "Bull case …" turns light green, "Bearish …" or "Bear case …" light red. Other cards stay neutral.

Hero box

Gold holds above its March range

What the levels say, and what would change the picture.

Dark blue, 12px corners, white text. Since 29 September 2026 only on the homepage and the forecast overview; forecasts and posts open black on white. At most one dark block per page area. The label above the headline, still on the live pages, is on the way out.

Figure tiles (on the way out)

  • 1980First shares bought
  • 1986Trading actively
  • 2015Forecasts published

The number is 2.2rem in dark blue, the label sits underneath in the soft grey. Not allowed since 29 September 2026 (rows of big numbers). Still on the homepage and the forecast overview.

Card

  • Silver price forecast

    Updated twice a day, with six charts from hour to year.

  • Copper price forecast

    Three charts, the contango explained in plain words.

1px border, 10px corners, heading and one soft grey line. On hover the border turns dark blue. Nothing else moves.

Price levels

Resistance

  • $3,790
  • $3,700

Price at analysis$3,642

Support

  • $3,560
  • $3,480

The real component (LevelList.astro): a price ladder on thin lines, highest level first. A short line in the chart's level colour marks each price: orange for resistance, yellow for the price at analysis, light green for support. Prices in IBM Plex Mono, so the digits line up.

Range row

  • This week$3,560 to $3,700
  • This month$3,480 to $3,790

Label above, range in IBM Plex Mono, between a thin line above and below. Used for forecast ranges (gold, DAX, Dow Jones). Since 2 October 2026 without the coloured left edge.

Table

PeriodLowHigh
Week3,5603,700
Month3,4803,790

Header row on #f4f6fa, every cell framed, and the whole table scrolls sideways on a phone instead of breaking the page.

Charts

Charts are the most valuable thing on this site, so they get their own rule. Karsten draws them in TradingView and exports them as images, which means the background colour is baked into every file. It is decided once and then left alone.

The chart background is #0d1b33, a near black with a blue cast. Not the hero blue and not plain black: it sits at the brightness of a black background, which is what hours of chart reading need, and it still belongs to the blue family the rest of the site is built from. Black backgrounds are no longer used.

It was weighed, not picked. The same setting produces the charts Karsten works in all day and the charts a reader sees for half a minute, so daily comfort counted for more than branding. Against the hero blue, this background gains three points of contrast on white bars and about a point on every coloured marker, which is what a long session notices. Do not change it for looks.

Publication choice: white bars on navy

Recorded on 2 October 2026 after comparing a white-background candlestick chart with a navy-background chart using white OHLC bars (open, high, low and close). Use Karsten's white bars on #0d1b33 as the forecast standard. In the examples, the dark chart looked cleaner and more distinctive, with price movement standing out clearly.

This is our editorial choice, not a measured reader preference or proof that dark backgrounds are always easier to read. The examples differed in market, timeframe, proportions and indicator density. Background colour and chart type are separate decisions: candlesticks can also work on navy, and their bodies can help when teaching individual candle patterns. That teaching use does not change the forecast standard.

Readability checks before publication

What can be drawn on it

Measured against the chart background, so nothing is chosen by eye.

ElementColourRatioVerdict
Bars and candleswhite17.19:1The default. Direction is carried by shape, not colour
Axis labels, dates, prices#dbe4ff13.55:1Reads clearly without shouting
Secondary labels#b9ccff10.76:1For anything below the main scale
Up marker#26a69a5.73:1Check thickness and visibility at the displayed image size
Down marker#ef53504.93:1Works. Still worth drawing thick on a busy chart
Indicator lines#ffd814 or #ffa50012.35:1, 8.70:1Yellow and orange. White works too
Any blue line#2962ff3.51:1Never. TradingView's default blue for moving averages sits too close to the background, so indicators are recoloured instead
Logo blue#084ec52.38:1Never. It disappears on this background

Line colours for levels

Horizontal levels are the one thing drawn on almost every chart, so they get a small fixed set. All three clear 8:1 on the background. Contrast alone does not guarantee that a one-pixel line survives image scaling; check the exported image at the size readers actually see.

ColourRatioUse
#ffd814 yellow12.35:1The level that matters most on this chart
#9be870 light green11.60:1Support, and levels that held
#ffa500 orange8.70:1Resistance, and levels still to be tested

Three colours are enough. A fourth and a fifth turn a chart into a colour code the reader has to learn, and the price action stops being the loudest thing on the screen.

How to keep them identical

Rules

Decisions that are already made. They are in AGENTS.md in full, with the date and the reason.

Design direction
The current look is the starting point and gets developed in small steps, not reinvented. Modern touches sparingly: no gradients, no glow, no dot or grid backgrounds, no generic icons, no "Get started".
Not allowed
The typical AI template look, decided on 29 September 2026. Modern and minimal, but not old-fashioned. None of these come back, not even sparingly:
  • Small uppercase labels above headlines ("eyebrows").
  • Coloured left borders on boxes, quotes and notes.
  • Numbered cards like "01, 02, 03".
  • Rows of big numbers as decoration.
  • Pill buttons and chips with fully round ends.
  • Cards inside cards, soft shadows, big rounded corners.
  • Gradients, glow, generic icons, dot or grid backgrounds.
Things that really are round stay round: the portrait photo and the round back-to-top button. Since 8 October 2026 no page uses any of these any more; new pages must not bring them back.
One dark block
At most one dark block per page area. The navy hero stays on the homepage; forecast and post headers are black on white since 29 September 2026.
Summary and FAQ
The summary "… in 30 seconds" is a dark box, the FAQ has a dark heading strip with light questions below. Hero colours only: navy, white, light blue #b9ccff. No labels like "In 30 seconds" or "FAQ" above the headings. Rejected: pastel with badges and ticks, coloured left bars, yellow as an accent.
Headings
Two-tone H2 in posts and forecasts: bold black up to the first colon, the rest regular in navy. Write new H2 as "Topic: statement".
Forecast summary
Exactly four items: price now, short term, key support, next target. About two lines each, key numbers in bold, no bold italic. An odd last card runs full width.
Scenario cards
Bull case light green, bear case light red, found by the heading. All other cards neutral.
Forecast sections
Heading, then the chart, then the explanation, then the levels. Charts run the full width of the column next to the sidebar.
Emphasis
Each paragraph gets one bold italic anchor and two to four bold key terms, in posts and forecasts, as on the German site.
Contents list
Automatic from four H2 sections up. From 1280px the sections sit in the left sidebar under the current market or topic and the current one is marked; below that it is a box to open. The author box is its last entry on posts.
Charts
Every chart goes through ChartFigure.astro and can be opened larger by clicking it. New exports are labelled in English; older charts with German labels are replaced when a forecast gets new charts.
Real content first
Karsten's charts, his photo and price levels beat decoration. Software comparisons get real screenshots, knowledge articles get diagrams, and every new article starts with a small image plan.
Logo
Made by scripts/logo/make-logo.py, never edited by hand. White version on dark grounds, never the logo blue on chart navy.
External links
Always a new tab, always through ExternalLink.astro or the markdown plugin, always rel="noopener" without noreferrer, so a linked provider can see where the visitor came from.
No affiliate links
Providers are linked directly, never through the German redirects.
Copy
English, plain, no dashes as punctuation. Write two sentences instead of one with an insert.
Prices
Formatted by src/lib/prices.ts, which knows dollars, points and exchange rates. Never formatted by hand in a page.
Addresses
Forecasts keep the addresses the old WordPress site used, so their rankings survive without a redirect.
Internal links
A new article links to the ones it belongs with, and they link back to it. A dead internal link breaks the build.
Translations
Every translation from the German site follows docs/translation-checklist.md. Where it disagrees with AGENTS.md, AGENTS.md wins.

Where things live

PathWhat is in it
src/layouts/Base.astroThe colour variables, the page width, the global styles
src/components/The thirteen components, each with its own styles
src/styles/The summary and FAQ boxes, and the graphics in posts
src/pages/One file per page, styles included
src/content/Blog posts and forecasts as markdown
src/data/site.tsCompany facts, team, dates. Edited by hand, never guessed
src/lib/prices.tsHow every price on the site is written
src/assets/charts/Karsten's chart images, one folder per market
AGENTS.mdEvery decision, with its date
docs/translation-checklist.mdWhat a translation has to clear before it goes live
docs/article-visuals.mdHow to add decision helpers, figures and price bars to a post
docs/work-board.mdWho is working on which files right now. Read it before design work

Open questions

An honest list, so nobody designs into a gap that is already known. Karsten decides each of these.