Skip to content

Commit 916c900

Browse files
authored
release: candidate ready
@cd-bash fix: [#121] arrow button on home page ecb0519 @cd-bash feat: [#106] text visibility across the website 9db2a82 @cd-bash fix: [#125] scroll top on navigation b6461f1 @cd-bash feat: [#127]: add google analytics 3393fca @cd-bash chore: [#123]: final text review
2 parents 670ff6e + b4497d8 commit 916c900

17 files changed

Lines changed: 200 additions & 86 deletions

File tree

src/components/buttons/index.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ export type MainButtonOptions = {
55
path: string;
66
styleType: 'primary' | 'secondary';
77
contrastMode: 'light' | 'dark';
8+
target?: '_self' | '_blank';
89
};
910

1011
// ------------------------------------------------------------------------
@@ -41,6 +42,7 @@ export function createMainButton(options: MainButtonOptions) {
4142
button.innerHTML = text;
4243
button.href = path;
4344
button.role = 'button';
45+
button.target = options.target || '_self';
4446

4547
return button;
4648
}

src/components/navigation/mobile-nav.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ export function buildMobileNav(links : LinkItem[]) {
1717

1818
menuButtonElement.addEventListener('click', () => {
1919
mobileNav.classList.toggle('menu-open');
20+
document.body.classList.toggle('mobile-menu-open');
2021
});
2122

2223
return mobileNav;

src/components/socials/index.ts

Lines changed: 6 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -2,37 +2,31 @@ import GITHUB_ICON from './assets/github-icon.svg';
22
import LINKEDIN_ICON from './assets/linkedin-icon.svg';
33
import INSTAGRAM_ICON from './assets/instagram-icon.svg';
44

5-
type social = {
6-
name: string;
7-
url: string;
8-
iconSrc: string;
9-
}
10-
11-
export const socials: social[] = [
12-
{
5+
export const socials = {
6+
github: {
137
name: 'GitHub',
148
url: 'https://github.com/cd-bash',
159
iconSrc: GITHUB_ICON,
1610
},
17-
{
11+
linkedin: {
1812
name: 'LinkedIn',
1913
url: 'https://www.linkedin.com/in/charlesdouc/',
2014
iconSrc: LINKEDIN_ICON,
2115
},
22-
{
16+
instagram: {
2317
name: 'Instagram',
2418
url: 'https://www.instagram.com/cd.oucet/',
2519
iconSrc: INSTAGRAM_ICON,
2620
},
27-
]
21+
}
2822

2923
//-----------------------------------------------------------------------
3024

3125
export function insertAllSocials() {
3226
const container = document.createElement('ul');
3327
container.className = 'social-icons';
3428

35-
socials.forEach(social => {
29+
Object.values(socials).forEach(social => {
3630
const li = document.createElement('li');
3731
const a = document.createElement('a');
3832
a.href = social.url;

src/content/about/index.ts

Lines changed: 17 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -3,27 +3,28 @@
33
import MANIFESTO_IMG from './assets/about-manifesto-visual.png';
44
import PATH_IMG from './assets/about-path-visual.png';
55
import INITIATIVE_IMG from './assets/about-initiative-visual.png';
6+
import { socials } from '../../components/socials';
67

78
export const aboutContent: AboutPageContentStructure = {
89
manifesto: {
910
introTitle: "About cd-labs",
10-
header: "The manifesto for <span class='highlight'>shorter games</span>",
11+
header: "The manifesto for **shorter games**",
1112
visualPath: MANIFESTO_IMG,
1213
paragraphs: [
13-
"Look at the achievements for any major blockbuster game. The trophy for completing the final chapter is often one of the rarest. The data tells a clear story: a huge percentage of players never see the credits roll.",
14-
"It isn't a lack of passion; it's a lack of time. As our lives get busier, 100-hour epics filled with repetitive tasks begin to feel like a second job. The industry is selling promises of vast worlds that, for most people, will remain largely unexplored.",
15-
"This pursuit of scale also leads to bloated budgets, immense pressure on development teams, and a reliance on safe, overused formulas to justify the investment. Creativity is often the first casualty of this cycle.",
16-
"Shorter, focused games are the elegant solution. They respect the player's time and intelligence. They allow for healthier, more creative development. They deliver a complete, handcrafted story with a satisfying conclusion. This isn't about making 'less' of a game; it's about making 'more' of the parts that truly matter.",
14+
"Look at the achievements for any major blockbuster game. The trophy for completing the **final chapter** is often one of the rarest. The data tells a clear story: **a huge percentage of players never see the credits roll**.",
15+
"It isn't a lack of passion; it's a **lack of time**. As our lives get busier, 100-hour epics filled with repetitive tasks begin to **feel like a second job**. The industry is selling promises of vast worlds that, for most people, will **remain largely unexplored**.",
16+
"This pursuit of scale also leads to **bloated budgets**, **immense pressure** on development teams, and a reliance on safe, **overused formulas** to justify the investment. Creativity is often the **first casualty** of this cycle.",
17+
"Shorter, focused games are the elegant solution. They **respect** the player's time and passion. They allow for **healthier**, more creative development. They deliver a complete, handcrafted story with a satisfying conclusion. This isn't about making *less* of a game; it's about making *more* of the parts that **truly matter**.",
1718
],
1819
alignment: 'right',
1920
},
2021

2122
ctaBannerA: {
2223
header: "Save your progress",
23-
body: "Don't lose your place in our story. Follow along for development checkpoints, sneak peeks, and insights into our design process.",
24+
body: "Don't lose your place in the story. Follow along for **development checkpoints**, **sneak peeks**, and insights into CD's **design process**.",
2425
buttons: [
25-
{ text: "Follow on Instagram", path: "#", styleType: "primary", contrastMode: 'light' },
26-
{ text: "See logs", path: "#", styleType: "secondary", contrastMode: 'light' }
26+
{ text: "Follow on Instagram", path: socials.instagram.url, styleType: "primary", contrastMode: 'light', target: '_blank' },
27+
{ text: "See logs", path: "/logs", styleType: "secondary", contrastMode: 'light' }
2728
],
2829
alignment: 'right'
2930
},
@@ -32,8 +33,8 @@ export const aboutContent: AboutPageContentStructure = {
3233
header: "Why I chose a <span class='highlight'>different path</span>.",
3334
visualPath: PATH_IMG,
3435
paragraphs: [
35-
"With a decade of experience, I've cultivated a diverse professional background as a marketing designer, UX/UI designer for web applications, and game developer. My core passion lies in games and interactive media—a burgeoning field that's reshaping the world and fostering innovation.",
36-
"Initially, I thought my path was in AAA studios, but I soon realized that design often takes a back seat there. Large productions typically stick to proven formulas to reduce risk. This makes sense, given the millions invested in game development and the critical need for success. However, many projects ultimately fail, games are canceled, teams are laid off, and the cycle continues. That is why, after four years of valuable experience, I decided to leave the AAA world and commit to a different path.",
36+
"With a decade of experience, I've cultivated a **diverse professional background** as a marketing designer, UX/UI designer for web applications, and game developer. My core passion lies in **games and interactive media**, a field that's reshaping the entertainment industry and fostering innovation.",
37+
"Initially, I thought my path was in AAA studios, but I soon realized that design often **takes a back seat** there. Large productions typically stick to **proven formulas to reduce risk**. This makes sense, given the **millions invested** in game development and the **critical need** for success. However, many projects ultimately fail, games are **canceled**, teams are **laid off**, and the **cycle continues**. That is why, after four years of valuable experience, I decided to **leave the AAA world** and commit to a **different path**.",
3738
],
3839
alignment: 'left',
3940
},
@@ -42,18 +43,18 @@ export const aboutContent: AboutPageContentStructure = {
4243
header: "The <span class='highlight'>cd-labs</span> initiative",
4344
visualPath: INITIATIVE_IMG,
4445
paragraphs: [
45-
"My commitment is to a different model for game development—one that’s faster, more creative, and built on a foundation of unique ideas instead of market speculation. The goal is to deliver smaller, yet complete, gaming experiences centered around innovative and engaging mechanics.",
46-
"This approach also aims to bring players closer to the development world. By working transparently and involving the community in the process, I can deliver regular, polished, and affordable games that truly respect the player’s time.",
46+
"My commitment is to a different model for game development—one that’s **faster**, more **creative**, and built on a foundation of **unique ideas** instead of market speculation. The goal is to deliver smaller, yet complete, **gaming experiences** centered around innovative and engaging mechanics.",
47+
"This approach also aims to bring players closer to the development world. By working **transparently** and **involving** players in the process, I can deliver **creative**, **polished**, and **affordable** games that truly respect the player’s time.",
4748
],
4849
alignment: 'right',
4950
},
5051

5152
ctaBannerB: {
52-
header: "Join our journey",
53-
body: "Be part of something exciting! Follow us on social media and stay updated with our latest news and developments.",
53+
header: "Ready to press start?",
54+
body: "Follow the development of Aqua, chat with other players, and get behind-the-scenes updates in the official cd-labs Discord server.",
5455
buttons: [
55-
{ text: "Follow on Twitter", path: "#", styleType: "primary", contrastMode: 'light' },
56-
{ text: "Like on Facebook", path: "#", styleType: "secondary", contrastMode: 'light' }
56+
{ text: "Join the Discord", path: "#", styleType: "primary", contrastMode: 'light' },
57+
{ text: "Follow Development", path: socials.github.url, styleType: "secondary", contrastMode: 'light', target: '_blank' }
5758
],
5859
alignment: 'left'
5960
},

src/content/home/index.ts

Lines changed: 26 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import {HomePageContentStructure} from "../../views";
2+
import { socials } from "../../components/socials";
23

34
import HOOK_VIDEO_WEBM from './assets/cd-labs-hook-animation.webm';
45
import HOOK_VIDEO_MP4 from './assets/cd-labs-hook-animation.mp4';
@@ -27,8 +28,8 @@ import SIDEQUESTS_VIDEO_MOBILE_MP4 from './assets/cd-labs-sidequests-mobile-anim
2728

2829
export const homePageContent: HomePageContentStructure = {
2930
hook: {
30-
header: "When was the last time you <span class='highlight'>finished</span> a game?",
31-
body: "CD-Labs’ initiative is to design <b>complete</b> gaming experiences for <b>busy lives</b>.",
31+
header: "When was the last time you **finished** a game?",
32+
body: "CD-Labs’ initiative is to design **complete** gaming experiences for **busy lives**.",
3233
videoWebem: HOOK_VIDEO_WEBM,
3334
videoMp4: HOOK_VIDEO_MP4,
3435
},
@@ -43,16 +44,16 @@ export const homePageContent: HomePageContentStructure = {
4344
mobileMp4: PHILOSOPHY_VIDEO_MOBILE_MP4,
4445
},
4546

46-
introTitle: "Our Game Design Philosophy",
47+
introTitle: "Game Design Philosophy",
4748
header: "Games that respect <span class='highlight'>your time.</span>",
4849

4950
paragraphs: [
50-
"I believe gaming should be an escape, not a second job. But as games have gotten bigger and more demanding, it's become harder to find the time to even finish one.",
51-
"That's why I started cd-labs. My goal is to deliver compact, complete gaming experiences that honor your schedule. Each game is a focused, handcrafted quest meant to be enjoyed in a single sitting or over a few evenings.",
51+
"I believe gaming should be an escape, not a **second job**. But as games have gotten bigger and more demanding, it's become harder to find the time to even **finish one**.",
52+
"That's why I started cd-labs. My goal is to deliver compact, **complete gaming experiences** that honor **your schedule**. Each game is a focused, handcrafted quest meant to be enjoyed in a **single sitting** or over a **few evenings**.",
5253
],
5354
buttons: [
54-
{ text: "Read More", path: "#", styleType: "secondary", contrastMode: 'dark' },
55-
{ text: "First Production", path: "#", styleType: "primary", contrastMode: 'dark' }
55+
{ text: "Read More", path: "/about", styleType: "secondary", contrastMode: 'dark' },
56+
{ text: "First Production", path: "#teaser", styleType: "primary", contrastMode: 'dark' }
5657
],
5758

5859
alignment: 'left'
@@ -69,17 +70,16 @@ export const homePageContent: HomePageContentStructure = {
6970
},
7071

7172
introTitle: "The First Experience is Taking Shape",
72-
header: "Project <span class='highlight'>Aqua</span>",
73+
header: "Project **Aqua**",
7374

7475
paragraphs: [
75-
"Inspired by the frustrations of everyday bad design, Aqua places you in a sleek testing facility. Your mission: master a series of deceptively simple shower prototypes.",
76-
"In this fast-paced puzzler, can you solve one of design's most infuriating problemsthe shower interfaceand calibrate each prototype?",
76+
"Inspired by the frustrations of **everyday bad design**, Aqua places you in a sleek testing facility. Your mission: master a series of deceptively **simple shower prototypes**.",
77+
"In this fast-paced puzzler, can you solve one of design's most infuriating problems -> **the shower interface**, and calibrate each prototype?",
7778
"<b>A sharp puzzle and a fresh perspective distilled into a single, focused game.</b"
7879
],
7980

8081
buttons: [
81-
{ text: "Whishlist on Steam", path: "#", styleType: "primary", contrastMode: 'dark' },
82-
{ text: "Follow Development", path: "#", styleType: "secondary", contrastMode: 'dark' }
82+
{ text: "Follow Development", path: socials.instagram.url, styleType: "primary", contrastMode: 'dark', target: '_blank' }
8383
],
8484

8585
alignment: 'right'
@@ -88,10 +88,10 @@ export const homePageContent: HomePageContentStructure = {
8888
// ------------------------------------------------------------------------
8989
ctaBannerA: {
9090
header: "Save your progress",
91-
body: "Don't lose your place in our story. Follow along for development checkpoints, sneak peeks, and insights into our design process.",
91+
body: "Don't lose your place in the story. Follow along for **development checkpoints**, **sneak peeks**, and insights into CD's **design process**.",
9292
buttons: [
93-
{ text: "Follow on Instagram", path: "#", styleType: "primary", contrastMode: 'light' },
94-
{ text: "See logs", path: "#", styleType: "secondary", contrastMode: 'light' }
93+
{ text: "Follow on Instagram", path: socials.instagram.url, styleType: "primary", contrastMode: 'light', target: '_blank' },
94+
{ text: "See logs", path: "/logs", styleType: "secondary", contrastMode: 'light' }
9595
],
9696
alignment: 'right'
9797
},
@@ -106,16 +106,16 @@ export const homePageContent: HomePageContentStructure = {
106106
mobileMp4: FOUNDER_VIDEO_MOBILE_MP4,
107107
},
108108

109-
header: "Who is <span class='highlight'>CD</span>?",
109+
header: "Who is **CD**",
110110

111111
paragraphs: [
112-
"Hi, I'm CD. After more than a decade as a professional designer and developer in marketing, web, and the AAA games industry, I decided to take a different path. I left the world of blockbuster recipes behind to focus on what I love most: crafting truly unique gameplay ideas.",
113-
"My goal with cd-labs is simple: to bring back that classic feeling of seeing a story through to its conclusion. I design my games to leave you feeling satisfied and inspired, not drained by an endless time commitment.",
112+
"Hi, I'm CD. After more than a decade as a **professional designer and developer** in marketing, web, and the AAA games industry, I decided to take a **different path**. I left the world of blockbuster recipes behind to focus on what I love most: **crafting truly unique gameplay ideas**.",
113+
"My goal with cd-labs is simple: to **bring back that classic feeling of seeing a story through to its conclusion**. I design my games to leave you feeling satisfied and inspired, not drained by an endless time commitment.",
114114
],
115115

116116
buttons: [
117-
{ text: "Let's connect", path: "#", styleType: "primary", contrastMode: 'dark' },
118-
{ text: "Read my story", path: "#", styleType: "secondary", contrastMode: 'dark' },
117+
{ text: "Let's connect", path: socials.linkedin.url, styleType: "primary", contrastMode: 'dark', target: '_blank' },
118+
{ text: "Read my story", path: "/about", styleType: "secondary", contrastMode: 'dark' },
119119
],
120120

121121
alignment: 'left'
@@ -132,15 +132,15 @@ export const homePageContent: HomePageContentStructure = {
132132
},
133133

134134
introTitle: "Collaborating on New Interactive Adventures",
135-
header: "Side Quests",
135+
header: "**Side Quests**",
136136

137137
paragraphs: [
138-
"While my main quest is crafting original games for cd-labs, I also take on special contract work. These 'side quests' allow me to collaborate with innovative clients on their own interactive adventures.",
139-
"I apply the same philosophy of focused, user-centric design to these projects, helping build everything from polished prototypes to unique web applications. It's a chance to tackle new challenges and help bring other exciting visions to life.",
138+
"While my main quest is crafting original games for cd-labs, I also take on special **contract work**. These 'side quests' allow me to collaborate with innovative clients on their own **interactive adventures**.",
139+
"I apply the same philosophy of **focused**, **user-centric design** to these projects, helping build everything from polished **prototypes** to unique **web applications**. It's a chance to tackle new challenges and help bring other **exciting visions** to life.",
140140
],
141141
buttons: [
142-
{ text: "Start a side quest", path: "#", styleType: "primary", contrastMode: 'dark' },
143-
{ text: "See our main quest", path: "#", styleType: "secondary", contrastMode: 'dark' }
142+
{ text: "Start a side quest", path: "/contact", styleType: "primary", contrastMode: 'dark' },
143+
{ text: "See our main quest", path: "#teaser", styleType: "secondary", contrastMode: 'dark' }
144144
],
145145

146146
alignment: 'right'
@@ -152,7 +152,7 @@ export const homePageContent: HomePageContentStructure = {
152152
body: "Follow the development of Aqua, chat with other players, and get behind-the-scenes updates in the official cd-labs Discord server.",
153153
buttons: [
154154
{ text: "Join the Discord", path: "#", styleType: "primary", contrastMode: 'light' },
155-
{ text: "Learn More", path: "#", styleType: "secondary", contrastMode: 'light' }
155+
{ text: "Follow Development", path: socials.github.url, styleType: "secondary", contrastMode: 'light', target: '_blank' }
156156
],
157157
alignment: 'left'
158158
},

0 commit comments

Comments
 (0)