Skip to content

Commit fc56d0e

Browse files
authored
Merge pull request #7 from nbovee/example-site-styling
Update to styling and name of theme
2 parents 5292553 + cc4e9da commit fc56d0e

25 files changed

+288
-282
lines changed

.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,3 +3,4 @@ Thumbs.db
33
public/
44
/resources/_gen/
55
.hugo_build.lock
6+
**/_gen

README.md

Lines changed: 64 additions & 76 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
<h1 align="center">online-resume</h1>
1+
<h1 align="center">bot-ready-resume</h1>
22

33

44
<h4 align="center">A minimalist Hugo theme for your resume, refreshed for LLM crawlers.</h4>
@@ -7,11 +7,11 @@
77

88
## Live Demo
99

10-
:point_right: [online-resume][Demo] :point_left:
10+
:point_right: [bot-ready-resume][Demo] :point_left:
1111

1212
## Getting Started
1313

14-
Online-Resume is a Hugo theme designed for creating resumes. It enables you to write your resume in YAML file using Markdown and manage it through Git. It can be displayed on a web page and printed as a PDF file directly from the browser.
14+
Bot Ready Resume is a Hugo theme designed for creating resumes. It enables you to write your resume in YAML file using Markdown and manage it through Git. It can be displayed on a web page and printed as a PDF file directly from the browser.
1515

1616
You can deploy it on various platforms that support Hugo or static files, such as GitHub Pages, Cloudflare Pages, Vercel, Netlify, your own hosting service, and others.
1717

@@ -26,101 +26,89 @@ Features:
2626
- LLM-friendly output formats (llms.txt, markdown alt content, steering prompts for llms).
2727
- Modular & responsive content design.
2828

29-
### Usage
30-
31-
#### Quickly
32-
33-
- Create new hugo site and add the theme through git submodule.
34-
- `hugo new site resume`
35-
- `cd resume && git init`
36-
- `git submodule add git@github.com:nbovee/hugo-theme-online-resume.git themes/online-resume`
37-
- Copy `hugo.yml` and `data.yml` files.
38-
- `cp themes/online-resume/exampleSite/hugo.yml .`
39-
- `cp themes/online-resume/exampleSite/data/data.yml ./data`
40-
- Edit `data/data.yml` file directly to update your resume.
41-
- Run `hugo server` and open in browser to preview the resume.
42-
43-
#### Customization
44-
45-
- `data/data.yml`: Edit the resume content.
46-
- `basic.initials`: Optional field to override auto-parsed initials used in favicons.
47-
- `llmPrompt`: Optional section to provide additional instructions for LLM consumption via llms.txt.
48-
- `contact`: For contact icons, use Font Awesome icon classes (e.g., `fa-brands fa-fw fa-github`). Search available icons at [Font Awesome](https://fontawesome.com/icons) using `fa-solid` for regular icons or `fa-brands` for brand logos. Additional custom icons are available in `static/assets/icons/css/all.css`.
49-
- `static/images/profile.png`: Your profile photo.
50-
- `static/images/favicon-32x32.png` and `static/favicon.ico`: Optional fallback favicons for older browsers (SVG favicons are auto-generated).
51-
- `hugo.yml`: Website and theme style settings.
52-
- `params.themeColor`: Theme color in OKLCH format (e.g., `"oklch(0.490 0.203 317.8)"`) or hex format (e.g., `"#1DA1F2"`). The remainder of colors are dynamically created in `colors.html`.
53-
- `params.llms.txt`: Enable/disable llms.txt output format.
54-
- `params.llmHeader`: Add LLM guidance as HTML comment in page head.
55-
- `params.bodyDelimiter`: Delimiter for body content items.
56-
- `params.siteCredit`: Show/hide site credits.
57-
- `outputFormats`: Configure markdown and llmstxt output formats.
29+
### Quick Start
5830

59-
## FAQ
31+
```bash
32+
# Create new Hugo site
33+
hugo new site my-resume
34+
cd my-resume
6035

61-
#### How to enable LLM-friendly output formats?
36+
# Add theme as submodule
37+
git init
38+
git submodule add https://github.com/nbovee/bot-ready-resume.git themes/bot-ready-resume
6239

63-
The theme can generate additional output formats optimized for LLM consumption:
64-
- Set `params.llms.txt: true` in `hugo.yml` to enable llms.txt output at `/llms.txt`.
65-
- Set `params.llmHeader: true` to add LLM guidance as an HTML comment in the page head.
66-
- Add custom instructions in `data.yml` under `llmPrompt.text`.
67-
- Configure `outputFormats` and `outputs` in `hugo.yml` to enable markdown and llms.txt formats.
40+
# Copy configuration files
41+
mkdir -p data
42+
cp themes/bot-ready-resume/exampleSite/hugo.yml .
43+
cp themes/bot-ready-resume/exampleSite/data/data.yml data/
6844

69-
#### How does dark mode work?
45+
# Start development server
46+
hugo server
47+
```
7048

71-
The theme includes an automatic dark mode toggle that:
72-
- Detects system color scheme preference on initial load.
73-
- Stores user preference in localStorage for subsequent visits.
74-
- Provides a manual toggle switch in the UI.
75-
- Automatically switches to light mode when printing.
76-
- Updates the favicon to match the current theme.
49+
Open your browser to `http://localhost:1313` to see your resume.
50+
Your will also have `llms.txt` at `http://localhost:1313/llms.txt`, and a markdown output at `http://localhost:1313/index.md`
7751

78-
#### How are favicons generated?
52+
Edit `data/data.yml` to customize your resume content.
7953

80-
Favicons are automatically generated from the user's name in `data.yml`:
81-
- Uses the first letter of the first and last name (e.g., "John Doe" → "JD").
82-
- Can be overridden by setting `basic.initials` in `data.yml`.
83-
- Generates both light and dark theme variants.
84-
- Uses the theme color for accent elements.
85-
- Creates SVG favicons with asset fingerprinting for cache busting.
86-
- Includes PNG and ICO fallbacks for broader browser support.
54+
### Customization
8755

88-
#### How to use OKLCH colors?
56+
#### Essential Files
8957

90-
Set `params.themeColor` in `hugo.yml` using the OKLCH format: `"oklch(L C H)"` where:
91-
- L = Lightness (0-1)
92-
- C = Chroma (0-0.4)
93-
- H = Hue (0-360)
58+
- **`data/data.yml`** - Your resume content (name, experience, skills, etc.)
59+
- **`hugo.yml`** - Theme configuration and styling options
60+
- **`static/images/profile.png`** - Your profile photo
9461

95-
Example: `"oklch(0.490 0.203 317.8)"` for a purple theme. The theme will handle color space conversion and ensure proper contrast.
62+
#### Key Configuration Options
9663

97-
#### How to change the order of the sections in the resume?
64+
**In `data/data.yml`:**
65+
- `basic.initials` - Override auto-generated favicon initials (optional)
66+
- `llmPrompt` - Add instructions for LLM consumption via llms.txt (optional)
67+
- `contact` - Use Font Awesome icon classes (e.g., `fa-brands fa-github`). Browse icons at [fontawesome.com/icons](https://fontawesome.com/icons)
9868

99-
There is an `order` option in each section, you can adjust the order by modifying this, the smaller the value the more forward the position.
69+
**In `hugo.yml`:**
70+
- `params.themeColor` - Theme color in OKLCH (e.g., `"oklch(0.490 0.203 317.8)"`) or hex (e.g., `"#1DA1F2"`)
71+
- `params.llms.txt` - Enable llms.txt output format (`true`/`false`)
72+
- `params.llmHeader` - Add LLM guidance in HTML head (`true`/`false`)
73+
- `params.siteCredit` - Show/hide footer credits (`true`/`false`)
10074

101-
#### How to hide the specified section in the resume?
75+
See the [exampleSite](exampleSite/) directory for a complete configuration reference.
10276

103-
If there is no content you want to keep in the section, you can remove it directly. If you want to keep the content, you can set the value of the `show` option of the section to `false`.
77+
## FAQ
10478

79+
#### How do I change section order or visibility?
10580

81+
Each section in `data/data.yml` has an `order` field (lower numbers appear first) and a `show` field (`true`/`false`).
10682

107-
#### How to create a resume in other languages?
83+
#### How do I enable LLM-friendly output?
10884

109-
For example, if you already have an English version resume and you want to create a Chinese version.
110-
- Copy a `data.yml` file in the `data` folder named `cn.yml` and edit the content.
111-
- Create `layouts/page` directories through `mkdir -p layouts/page`.
112-
- Copy `index.html` file in the theme layouts directory to above directory `cp themes/online-resume/layouts/index.html layouts/page/cn.html`
113-
- Change the `{{- partial "common.html" (dict "Site" .Site "data" .Site.Data.data) }}` in the `cn.html` to `{{- partial "common.html" (dict "Site" .Site "data" .Site.Data.cn) }}`.
114-
- Create `content` directory in root directory and create a markdown file named `cn.md`, add front matter `layout: cn` in `cn.md`.
115-
- Run `hugo server` and you can preview the Chinese version of your resume by visiting `https://YOUR_RESUME_URL/cn`.
85+
The exampleSite includes LLM features by default. The theme generates:
86+
- `/llms.txt` endpoint for structured LLM consumption
87+
- Markdown alt content for accessibility
88+
- Optional HTML comment guidance for LLMs
89+
90+
Enable/disable via `params.llms.txt` and `params.llmHeader` in `hugo.yml`.
91+
92+
#### How does dark mode work?
11693

94+
Dark mode automatically detects system preference, stores user preference in localStorage, and provides a manual toggle. It switches to light mode when printing and updates the favicon accordingly.
95+
96+
#### What are OKLCH colors?
97+
98+
OKLCH is a modern color space that provides better perceptual uniformity. Format: `"oklch(L C H)"` where L=Lightness (0-1), C=Chroma (0-0.4), H=Hue (0-360). Example: `"oklch(0.490 0.203 317.8)"` for purple. Hex colors also work.
99+
100+
#### How do I add a language version?
101+
102+
Create a new data file (e.g., `data/cn.yml`), create a layout file that references it, and add a content page with the corresponding layout. See the README for detailed steps or check the Hugo multilingual documentation.
103+
104+
#### How are favicons generated?
117105

118-
## Others
106+
Favicons auto-generate from your name (e.g., "John Doe" → "JD"), using theme colors with light/dark variants. Override via `basic.initials` in `data.yml`. 1-3 characters works best.
119107

120-
- Original Hugo Version: [tarrex/hugo-theme-online-resume][Base Version]
121108

109+
## Other
122110

123-
[Demo]: https://nick.bov.ee/hugo-theme-online-resume
111+
- This repository was originally forked from: [tarrex/hugo-theme-online-resume](https://github.com/tarrex/hugo-theme-online-resume)
124112

125113

126-
[Base Version]: https://github.com/tarrex/hugo-theme-online-resume
114+
[Demo]: https://nick.bov.ee/bot-ready-resume

assets/sass/_base.scss

Lines changed: 58 additions & 49 deletions
Original file line numberDiff line numberDiff line change
@@ -92,7 +92,6 @@ small {
9292
font-weight: $base-font-weight * 1;
9393
}
9494

95-
// Consolidated emphasis elements
9695
.role,
9796
.major,
9897
.project-name,
@@ -105,49 +104,48 @@ small {
105104
.issuer,
106105
.awarder,
107106
.reference-title,
108-
.basic .header .name,
109-
.basic .header .title,
110-
.basic .header .description,
107+
.basic .header :is(.name,
108+
.title,
109+
.description,),
111110
.skill .section-content .groups .group-name {
112111
font-weight: $base-font-weight * 1.5;
113112
}
114113

115-
// Consolidated icon spacing
116-
.section-title i::after,
117-
.location i::after,
118-
.degree i::after,
119-
.project-name i::after,
120-
.contact-item i::after,
114+
:is(
115+
.section-title,
116+
.location,
117+
.degree,
118+
.project-name,
119+
.contact-item
120+
) i::after,
121121
.skill-level i:not(:last-child)::after,
122-
.skill-name::after,
123-
.language .item small::before {
122+
.skill-name::after {
124123
content: "\00a0";
125-
font-family: initial;
124+
white-space: nowrap;
126125
}
127126

128-
// Double spacing for skill names
129-
.skill-name::after {
130-
content: "\00a0\00a0";
127+
.language .item small::before {
128+
content: "\00a0";
129+
white-space: nowrap;
131130
}
132131

133-
// Consolidated delimiter patterns
134-
.subrow:not(:last-child)::after,
135-
.title-desc-container .item:not(:last-child)::after,
136-
.contact-item:not(:last-child)::after,
137-
.group-item span:not(:last-child)::after,
138-
.language .item:not(:last-child)::after,
139-
.interest .item:not(:last-child)::after {
132+
:is(
133+
.subrow,
134+
.title-desc-container .item,
135+
.contact-item,
136+
.group-item span,
137+
.language .item,
138+
.interest .item
139+
):not(:last-child)::after {
140140
content: $body-delimiter;
141141
color: var(--color-separator);
142142
margin: 0 0.5em;
143143
}
144144

145-
// Special delimiter for contact items
146145
.contact-item:not(:last-child)::after {
147146
content: $contact-delimiter;
148147
}
149148

150-
// Consolidated flex baseline elements
151149
.location,
152150
.contact-item,
153151
.credit {
@@ -157,26 +155,25 @@ small {
157155

158156
// Consolidated flex wrap elements
159157
.contact,
160-
.certificate .section-content .items,
161-
.award .section-content .items,
162-
.reference .section-content .items,
163-
.skill .section-content .items,
164-
.language .section-content .items,
165-
.interest .section-content .items {
158+
:is(
159+
.certificate,
160+
.award,
161+
.reference,
162+
.skill,
163+
.language,
164+
.interest
165+
) .section-content .items {
166166
display: flex;
167167
flex-wrap: wrap;
168168
}
169169

170170
// Consolidated spacing patterns
171-
.section-content .description,
172-
.section-content .items .item,
173-
.section-content .groups {
171+
.section-content :is(.description, .items .item, .groups) {
174172
margin-bottom: $spacing-unit / 4;
175173
}
176174

177175
// Consolidated padding patterns
178-
.section-content .items .item .description,
179-
.section-content .authors {
176+
.section-content :is(.items .item .description, .authors) {
180177
padding-left: 1rem;
181178
}
182179

@@ -192,8 +189,10 @@ small {
192189
}
193190

194191
// Consolidated border patterns
195-
.item:not(:nth-last-child(1)),
196-
.group:not(:last-child) {
192+
:is(
193+
.item,
194+
.group
195+
):not(:last-child) {
197196
border-bottom: 1px dashed var(--color-theme-border);
198197
}
199198

@@ -208,6 +207,25 @@ small {
208207
border-bottom: none;
209208
}
210209

210+
// Skill items: remove border for last row (3 items per row at 30% flex-basis)
211+
.skill .items {
212+
// If we have 3n items total, remove border from last 3
213+
.item:nth-last-child(-n+3):nth-last-child(3n),
214+
.item:nth-last-child(-n+3):nth-last-child(3n-1),
215+
.item:nth-last-child(-n+3):nth-last-child(3n-2) {
216+
border-bottom: none;
217+
}
218+
// If we have 3n+1 items total, remove border from last 1
219+
.item:last-child:nth-child(3n+1) {
220+
border-bottom: none;
221+
}
222+
// If we have 3n+2 items total, remove border from last 2
223+
.item:nth-last-child(-n+2):nth-last-child(3n+1),
224+
.item:nth-last-child(-n+2):nth-last-child(3n+2) {
225+
border-bottom: none;
226+
}
227+
}
228+
211229
// Override for group borders
212230
.group:not(:last-child) {
213231
border-bottom: 1px dashed var(--color-separator-border);
@@ -312,13 +330,6 @@ small {
312330

313331
.footer {
314332
margin: 0;
315-
.section-content {
316-
.llm {
317-
color: var(--color-body);
318-
opacity: 0;
319-
font-size: 1%;
320-
}
321-
}
322333
}
323334

324335
.certificate,
@@ -337,10 +348,11 @@ small {
337348
.skill {
338349
.section-content {
339350
.items {
351+
justify-content: center;
340352
.item {
341353
display: inline-flex;
342354
align-items: center;
343-
justify-content: end;
355+
justify-content: center;
344356
flex-basis: 30%;
345357

346358
.skill-level {
@@ -391,6 +403,3 @@ small {
391403
margin: $spacing-unit 0;
392404
}
393405
}
394-
395-
/* Dark theme styles - most styling now handled by CSS custom properties above */
396-

assets/sass/_print.scss

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,14 @@
3030
break-inside: avoid !important;
3131
}
3232

33+
.section-title {
34+
break-after: avoid !important;
35+
}
36+
37+
.item {
38+
break-inside: avoid !important;
39+
}
40+
3341
.wrapper {
3442
max-width: 100% !important;
3543
margin: 0.5rem !important;

0 commit comments

Comments
 (0)