From 2f4fceadadedc0ac6dbb65afbfe65efb9dbcc671 Mon Sep 17 00:00:00 2001 From: codegirl-007 Date: Fri, 3 Jul 2026 01:41:54 -0700 Subject: [PATCH] initial theme - coming soon --- .gitignore | 19 + _archive/about.md | 11 + _archive/learn/_index.md | 7 + .../learn/game-programming-patterns-review.md | 13 + .../learn/td-language-comparison-intro.md | 16 + _archive/learn/td-odin-week-1.md | 25 ++ archetypes/default.md | 5 + archetypes/learn.md | 16 + content/_index.md | 6 + hugo.toml | 17 + themes/codegirl/layouts/_default/baseof.html | 13 + themes/codegirl/layouts/_default/list.html | 17 + themes/codegirl/layouts/_default/single.html | 33 ++ themes/codegirl/layouts/index.html | 8 + themes/codegirl/layouts/partials/footer.html | 3 + themes/codegirl/layouts/partials/head.html | 8 + themes/codegirl/layouts/partials/header.html | 3 + .../codegirl/layouts/partials/post-card.html | 9 + themes/codegirl/static/css/style.css | 404 ++++++++++++++++++ themes/codegirl/theme.toml | 9 + 20 files changed, 642 insertions(+) create mode 100644 .gitignore create mode 100644 _archive/about.md create mode 100644 _archive/learn/_index.md create mode 100644 _archive/learn/game-programming-patterns-review.md create mode 100644 _archive/learn/td-language-comparison-intro.md create mode 100644 _archive/learn/td-odin-week-1.md create mode 100644 archetypes/default.md create mode 100644 archetypes/learn.md create mode 100644 content/_index.md create mode 100644 hugo.toml create mode 100644 themes/codegirl/layouts/_default/baseof.html create mode 100644 themes/codegirl/layouts/_default/list.html create mode 100644 themes/codegirl/layouts/_default/single.html create mode 100644 themes/codegirl/layouts/index.html create mode 100644 themes/codegirl/layouts/partials/footer.html create mode 100644 themes/codegirl/layouts/partials/head.html create mode 100644 themes/codegirl/layouts/partials/header.html create mode 100644 themes/codegirl/layouts/partials/post-card.html create mode 100644 themes/codegirl/static/css/style.css create mode 100644 themes/codegirl/theme.toml diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..97b540f --- /dev/null +++ b/.gitignore @@ -0,0 +1,19 @@ +# Hugo build output +/public/ +/resources/ +.hugo_build.lock + +# OS +.DS_Store +Thumbs.db + +# Editor +*.swp +*.swo +*~ +.vscode/ +.idea/ + +# Env / secrets (deploy keys, API tokens, etc.) +.env +.env.* diff --git a/_archive/about.md b/_archive/about.md new file mode 100644 index 0000000..408aef1 --- /dev/null +++ b/_archive/about.md @@ -0,0 +1,11 @@ +--- +title: About +description: Who we are and why we're building in public. +draft: true +--- + +**Codegirl Games** is a game studio and content company with a simple mission: build and release affordable, full-feature games while teaching others how game development actually works. + +We're not pretending to have all the answers. We're learning in public — comparing languages on the same project, applying patterns from books like *Game Programming Patterns*, and building a game engine through trial and error. + +If you want honest process over polished marketing, you're in the right place. diff --git a/_archive/learn/_index.md b/_archive/learn/_index.md new file mode 100644 index 0000000..d85356e --- /dev/null +++ b/_archive/learn/_index.md @@ -0,0 +1,7 @@ +--- +title: Learn +description: Devlogs, lessons, language comparisons, videos, and book reviews. +draft: true +--- + +Tutorials, devlogs, and experiments from our game development journey. diff --git a/_archive/learn/game-programming-patterns-review.md b/_archive/learn/game-programming-patterns-review.md new file mode 100644 index 0000000..0b9e26c --- /dev/null +++ b/_archive/learn/game-programming-patterns-review.md @@ -0,0 +1,13 @@ +--- +title: "Game Programming Patterns — first impressions" +description: A book review of Robert Nystrom's Game Programming Patterns and how we'll use it in our projects. +date: 2026-06-28 +type: review +book: "Game Programming Patterns" +tags: ["patterns", "books"] +draft: true +--- + +*Game Programming Patterns* by Robert Nystrom is the reference we're using as we build. The patterns aren't abstract — we're applying them to real code in our tower defense and engine experiments. + +Expect follow-up posts that map specific chapters to our codebase: State for unit AI, Object Pool for projectiles, and more. diff --git a/_archive/learn/td-language-comparison-intro.md b/_archive/learn/td-language-comparison-intro.md new file mode 100644 index 0000000..83b06e1 --- /dev/null +++ b/_archive/learn/td-language-comparison-intro.md @@ -0,0 +1,16 @@ +--- +title: "Why we're comparing languages on the same game" +description: Introducing our tower defense language comparison series — Odin, C, and C++. +date: 2026-07-01 +type: lesson +series: td-language-comparison +series_order: 1 +tags: ["odin", "c", "cpp", "tower-defense"] +draft: true +--- + +We're building the same tower defense game in multiple languages — starting with Odin, then C, then C++ — to compare what each language is actually like for game development. + +This isn't a benchmark blog. We're documenting ergonomics, tooling, bugs, and the feeling of working in each language day to day. + +More posts in this series coming soon. diff --git a/_archive/learn/td-odin-week-1.md b/_archive/learn/td-odin-week-1.md new file mode 100644 index 0000000..454a719 --- /dev/null +++ b/_archive/learn/td-odin-week-1.md @@ -0,0 +1,25 @@ +--- +title: "Week 1: Tower defense in Odin — project kickoff" +description: Starting the tower defense prototype in Odin and defining the shared game spec. +date: 2026-07-02 +type: devlog +series: td-language-comparison +series_order: 2 +languages: ["odin"] +tags: ["odin", "tower-defense", "devlog"] +draft: true +--- + +First devlog in the tower defense series. This week: project structure, rendering a basic grid, and defining the shared spec that C and C++ ports will follow. + +## What worked + +- Odin's explicit memory model made the render loop straightforward +- Keeping the game spec language-agnostic from day one + +## What broke + +- Pathfinding placeholder — towers can be placed anywhere for now +- No entity system yet; everything is in one update function + +Next: basic tower placement and enemy waves. diff --git a/archetypes/default.md b/archetypes/default.md new file mode 100644 index 0000000..25b6752 --- /dev/null +++ b/archetypes/default.md @@ -0,0 +1,5 @@ ++++ +date = '{{ .Date }}' +draft = true +title = '{{ replace .File.ContentBaseName "-" " " | title }}' ++++ diff --git a/archetypes/learn.md b/archetypes/learn.md new file mode 100644 index 0000000..729fabc --- /dev/null +++ b/archetypes/learn.md @@ -0,0 +1,16 @@ +--- +title: "{{ replace .Name "-" " " | title }}" +date: {{ .Date }} +draft: true +type: devlog +description: "" +series: "" +series_order: 0 +languages: [] +tags: [] +video_url: "" +book: "" +chapter: 0 +--- + +Write your post here. diff --git a/content/_index.md b/content/_index.md new file mode 100644 index 0000000..05b27c8 --- /dev/null +++ b/content/_index.md @@ -0,0 +1,6 @@ +--- +title: Coming soon +description: Codegirl Games — building games and learning together. +--- + +We're working on something new. Check back soon. diff --git a/hugo.toml b/hugo.toml new file mode 100644 index 0000000..3c3d28b --- /dev/null +++ b/hugo.toml @@ -0,0 +1,17 @@ +baseURL = 'https://codegirl.games/' +languageCode = 'en-us' +title = 'codegirl.games' +theme = 'codegirl' + +[params] + logo = 'codegirl.games' + description = 'Building affordable, full-feature games in public — and teaching game development along the way.' + author = 'Codegirl Games' + +[markup] + [markup.goldmark] + [markup.goldmark.renderer] + unsafe = true + +[outputs] + home = ['HTML', 'RSS'] diff --git a/themes/codegirl/layouts/_default/baseof.html b/themes/codegirl/layouts/_default/baseof.html new file mode 100644 index 0000000..c6ee1de --- /dev/null +++ b/themes/codegirl/layouts/_default/baseof.html @@ -0,0 +1,13 @@ + + + + {{ partial "head.html" . }} + + + {{ partial "header.html" . }} +
+ {{ block "main" . }}{{ end }} +
+ {{ partial "footer.html" . }} + + diff --git a/themes/codegirl/layouts/_default/list.html b/themes/codegirl/layouts/_default/list.html new file mode 100644 index 0000000..fb4b542 --- /dev/null +++ b/themes/codegirl/layouts/_default/list.html @@ -0,0 +1,17 @@ +{{ define "main" }} +
+
+

{{ .Title }}

+ {{ with .Content }} +
{{ . }}
+ {{ end }} +
+ +
+{{ end }} diff --git a/themes/codegirl/layouts/_default/single.html b/themes/codegirl/layouts/_default/single.html new file mode 100644 index 0000000..35d0342 --- /dev/null +++ b/themes/codegirl/layouts/_default/single.html @@ -0,0 +1,33 @@ +{{ define "main" }} +
+
+ +

{{ .Title }}

+ {{ with .Description }}

{{ . }}

{{ end }} + {{ with .Params.languages }} + + {{ end }} + {{ with .Params.series }} +

Part of {{ . }}

+ {{ end }} + {{ with .Params.video_url }} +
+ +
+ {{ end }} + {{ if and .Params.book .Params.chapter }} +

From {{ .Params.book }} — Chapter {{ .Params.chapter }}

+ {{ end }} +
+
{{ .Content }}
+
+{{ end }} diff --git a/themes/codegirl/layouts/index.html b/themes/codegirl/layouts/index.html new file mode 100644 index 0000000..fac6acf --- /dev/null +++ b/themes/codegirl/layouts/index.html @@ -0,0 +1,8 @@ +{{ define "main" }} +
+

{{ .Title }}

+ {{ with .Content }} +
{{ . }}
+ {{ end }} +
+{{ end }} diff --git a/themes/codegirl/layouts/partials/footer.html b/themes/codegirl/layouts/partials/footer.html new file mode 100644 index 0000000..4afd5e8 --- /dev/null +++ b/themes/codegirl/layouts/partials/footer.html @@ -0,0 +1,3 @@ + diff --git a/themes/codegirl/layouts/partials/head.html b/themes/codegirl/layouts/partials/head.html new file mode 100644 index 0000000..bcbcaba --- /dev/null +++ b/themes/codegirl/layouts/partials/head.html @@ -0,0 +1,8 @@ + + +{{ if .IsHome }}{{ .Site.Title }}{{ else }}{{ .Title }} · {{ .Site.Title }}{{ end }} + + + + + diff --git a/themes/codegirl/layouts/partials/header.html b/themes/codegirl/layouts/partials/header.html new file mode 100644 index 0000000..71ee64f --- /dev/null +++ b/themes/codegirl/layouts/partials/header.html @@ -0,0 +1,3 @@ + diff --git a/themes/codegirl/layouts/partials/post-card.html b/themes/codegirl/layouts/partials/post-card.html new file mode 100644 index 0000000..0f5b139 --- /dev/null +++ b/themes/codegirl/layouts/partials/post-card.html @@ -0,0 +1,9 @@ + +

+ {{ with .Params.type }}{{ humanize . }}{{ end }} + +

+

{{ .Title }}

+ {{ with .Description }}

{{ . }}

{{ end }} + {{ with .Params.series }}

{{ . }}

{{ end }} +
diff --git a/themes/codegirl/static/css/style.css b/themes/codegirl/static/css/style.css new file mode 100644 index 0000000..3610e04 --- /dev/null +++ b/themes/codegirl/static/css/style.css @@ -0,0 +1,404 @@ +:root { + --color-bg: #000000; + --color-surface: #141414; + --color-text: #ffffff; + --color-muted: #888888; + --font-sans: "Inter", system-ui, -apple-system, "Segoe UI", sans-serif; + --space-inline: clamp(1.25rem, 4vw, 3.5rem); + --width-read: 42rem; +} + +*, +*::before, +*::after { + box-sizing: border-box; +} + +html { + font-size: 16px; +} + +body { + margin: 0; + font-family: var(--font-sans); + background-color: var(--color-bg); + color: var(--color-text); + line-height: 1.6; + -webkit-font-smoothing: antialiased; +} + +.page { + min-height: 100vh; + display: flex; + flex-direction: column; +} + +.page__main { + flex: 1; + display: flex; + flex-direction: column; +} + +.container { + width: 100%; + padding-inline: var(--space-inline); +} + +.container--narrow { + max-width: calc(var(--width-read) + var(--space-inline) * 2); + margin-inline: auto; +} + +/* Site header */ + +.site-header { + display: flex; + align-items: center; + justify-content: center; + padding-block: clamp(1.25rem, 2vw, 1.75rem); +} + +.site-header__logo { + color: var(--color-text); + text-decoration: none; + font-weight: 700; + font-size: clamp(1rem, 2vw, 1.125rem); + letter-spacing: -0.02em; +} + +/* Coming soon */ + +.coming-soon { + flex: 1; + display: flex; + flex-direction: column; + justify-content: center; + align-items: center; + text-align: center; + padding-block: clamp(4rem, 12vh, 8rem); +} + +.coming-soon__title { + margin: 0 0 clamp(1rem, 2vw, 1.5rem); + font-size: clamp(2.5rem, 8vw, 5rem); + font-weight: 700; + line-height: 1.05; + letter-spacing: -0.04em; +} + +.coming-soon__body { + max-width: 28rem; + color: var(--color-muted); + font-size: clamp(1rem, 2vw, 1.125rem); + line-height: 1.7; +} + +/* Hero */ + +.hero { + padding-block: clamp(3rem, 8vw, 6rem) clamp(2.5rem, 6vw, 4rem); +} + +.hero__title { + margin: 0 0 clamp(1rem, 2vw, 1.5rem); + font-size: clamp(2.25rem, 7vw, 4.5rem); + font-weight: 700; + line-height: 1.05; + letter-spacing: -0.04em; + max-width: 14ch; +} + +.hero__body { + max-width: 38rem; + color: var(--color-muted); + font-size: clamp(1rem, 2vw, 1.25rem); + line-height: 1.7; +} + +/* Latest section */ + +.latest { + padding-block: clamp(2.5rem, 5vw, 4rem) clamp(3rem, 6vw, 5rem); +} + +.latest__header { + display: flex; + align-items: baseline; + justify-content: space-between; + gap: 1rem; + margin-bottom: clamp(1.5rem, 3vw, 2rem); +} + +.latest__title { + margin: 0; + font-size: clamp(1.25rem, 2.5vw, 1.75rem); + font-weight: 700; + letter-spacing: -0.02em; +} + +.latest__link { + color: var(--color-muted); + text-decoration: none; + font-size: 0.9375rem; + font-weight: 500; +} + +.latest__link:hover { + color: var(--color-text); +} + +/* Post list */ + +.post-list { + list-style: none; + margin: 0; + padding: 0; + display: grid; + gap: 0; +} + +@media (min-width: 640px) { + .post-list { + grid-template-columns: repeat(2, 1fr); + column-gap: clamp(1.5rem, 4vw, 3rem); + } +} + +@media (min-width: 1100px) { + .post-list { + grid-template-columns: repeat(3, 1fr); + } +} + +.post-list__item { + margin: 0; +} + +.post-list__link { + display: block; + padding-block: 1.25rem; + text-decoration: none; + color: inherit; +} + +.post-list__link:hover .post-list__title { + color: var(--color-muted); +} + +.post-list__meta { + display: flex; + flex-wrap: wrap; + gap: 0.5rem; + align-items: center; + margin: 0 0 0.375rem; + font-size: 0.8125rem; + color: var(--color-muted); +} + +.post-list__type { + text-transform: uppercase; + letter-spacing: 0.06em; + font-weight: 500; +} + +.post-list__type::after { + content: "·"; + margin-left: 0.5rem; +} + +.post-list__title { + margin: 0 0 0.375rem; + font-size: clamp(1rem, 1.8vw, 1.125rem); + font-weight: 600; + line-height: 1.35; + letter-spacing: -0.02em; + transition: color 0.15s ease; +} + +.post-list__excerpt { + margin: 0; + color: var(--color-muted); + font-size: 0.9375rem; + line-height: 1.55; +} + +.post-list__series { + margin: 0.5rem 0 0; + color: var(--color-muted); + font-size: 0.8125rem; +} + +/* Section (list pages) */ + +.section { + padding-block: clamp(2.5rem, 5vw, 4rem) clamp(3rem, 6vw, 5rem); +} + +.section__title { + margin: 0 0 0.75rem; + font-size: clamp(2rem, 5vw, 3rem); + font-weight: 700; + letter-spacing: -0.03em; +} + +.section__intro { + max-width: 38rem; + color: var(--color-muted); + font-size: clamp(1rem, 2vw, 1.125rem); + margin-bottom: clamp(1.5rem, 3vw, 2.5rem); +} + +/* Post (single) */ + +.post { + padding-block: clamp(2.5rem, 5vw, 4rem) clamp(3rem, 6vw, 5rem); +} + +.post__meta { + display: flex; + flex-wrap: wrap; + gap: 0.5rem; + align-items: center; + margin: 0 0 1rem; + font-size: 0.875rem; + color: var(--color-muted); +} + +.post__type { + text-transform: uppercase; + letter-spacing: 0.06em; + font-weight: 500; + font-size: 0.8125rem; +} + +.post__type::after { + content: "·"; + margin-left: 0.5rem; +} + +.post__title { + margin: 0 0 0.75rem; + font-size: clamp(2rem, 5vw, 3rem); + font-weight: 700; + line-height: 1.15; + letter-spacing: -0.03em; +} + +.post__lead { + margin: 0 0 1.25rem; + color: var(--color-muted); + font-size: clamp(1rem, 2vw, 1.25rem); + line-height: 1.6; +} + +.post__tags, +.post__series, +.post__reference { + margin: 0 0 1rem; + color: var(--color-muted); + font-size: 0.9375rem; +} + +.post__video { + margin: 0 0 2rem; + aspect-ratio: 16 / 9; +} + +.post__iframe { + width: 100%; + height: 100%; + border: 0; +} + +.post__body { + margin-bottom: 0; +} + +/* Content typography */ + +.content { + font-size: 1rem; +} + +.content > :first-child { + margin-top: 0; +} + +.content > :last-child { + margin-bottom: 0; +} + +.content h2 { + margin-top: 2.5rem; + margin-bottom: 0.75rem; + font-size: clamp(1.25rem, 2.5vw, 1.5rem); + font-weight: 700; + letter-spacing: -0.02em; +} + +.content h3 { + margin-top: 2rem; + margin-bottom: 0.5rem; + font-size: 1.125rem; + font-weight: 600; +} + +.content p { + margin: 0 0 1rem; +} + +.content a { + color: var(--color-text); + text-decoration: underline; + text-underline-offset: 2px; +} + +.content a:hover { + color: var(--color-muted); +} + +.content ul, +.content ol { + margin: 0 0 1rem; + padding-left: 1.25rem; +} + +.content li { + margin-bottom: 0.375rem; +} + +.content code { + font-size: 0.875em; + padding: 0.125rem 0.25rem; + background-color: var(--color-surface); +} + +.content pre { + overflow-x: auto; + padding: 1rem; + background-color: var(--color-surface); +} + +.content pre code { + padding: 0; + background: none; +} + +.content blockquote { + margin: 1.5rem 0; + padding-left: 1rem; + border-left: 2px solid var(--color-muted); + color: var(--color-muted); +} + +/* Site footer */ + +.site-footer { + padding-block: clamp(2rem, 4vw, 3rem); +} + +.site-footer__copy { + margin: 0; + color: var(--color-muted); + font-size: 0.875rem; +} diff --git a/themes/codegirl/theme.toml b/themes/codegirl/theme.toml new file mode 100644 index 0000000..9d64486 --- /dev/null +++ b/themes/codegirl/theme.toml @@ -0,0 +1,9 @@ +name = "Codegirl" +license = "MIT" +licenselink = "https://opensource.org/licenses/MIT" +description = "Dark, minimal theme for Codegirl Games" +tags = ["dark", "minimal", "blog"] +min_version = "0.120.0" + +[author] + name = "Codegirl Games"