diff --git a/docs/inspiration.md b/docs/inspiration.md index b69275e..c38d725 100644 --- a/docs/inspiration.md +++ b/docs/inspiration.md @@ -220,6 +220,29 @@ dated "Lately" list across both sides (`mockups/simple-side-a.html`, `simple-sid gacha-event-tracker for work and Saltlakridserne for off-the-clock, and then have the app fill in the rest by newest." That is `docs/specs/008-simple-side-index.md` (approved, not built yet on his request). +## Work page, CV first (2026-11-12) + +His feedback on `/work/`: everything had the same weight; he wanted a grid with the impressive projects accentuated, +and room for courses, certificates, competitions and other accolades. He named the six that matter: Event Tracker for +Gacha Games, Config, Bachelor Report, Student Dashboard, Mixed-Reality Rowing Game, VR-Classroom. Courses come from +his own spreadsheet; competitions from his CV; Art Bubble and Lystrup Genbrugser are volunteer IT/website work +("not just my project"), so they belong with recognition, not with the projects. Rounds (all in `mockups/work-*.html`): + +- **r1** A one grid three sizes, B picked six + tight grid, C hero + uneven grid: "none are completely what I imagine". + Liked: course counts ("8 courses · 3 labs") and time spent; wants certificates shown clearly, and certificates found + when searching the work page. Orange for the most impressive accolades. +- **r2** D woven grid, E packed by size: "too chaotic". **r3** F alternating bands, G picked + index column, H two + sizes even grid: F and H closest, "still a bit too chaotic and unfocused". **r4** equal blocks with greyscale + screenshots: no. **Colour on hover is nice, but full desaturation makes the page look boring and not interactable.** +- Then the picture in his words: the first thing seen is the **CV in ten seconds**; writing matters less (few posts); + then the most impressive projects first, the weaker ones viewable but less focused "so the ones of more questionable + quality isn't clicked too much on"; certificates and the main accolades near the top, full detail at the bottom. +- **r5** K CV hero, L CV sidebar, M at-a-glance band: **K closest.** "Projects I'm proudest of" should get more detail; + "also made" should keep today's list view. Remove Bluesky from the work side (keep /simple, GitHub, LinkedIn, email). +- **K v2** (`mockups/work-k2.html`): K's header + the featured panels of the approved `tech-r3-c` ("Look at the + featured section here. This is really good.") + today's list + the record. **Picked**: "This looks like a good + improvement. Lets make it work!" → `docs/specs/009-work-page-cv-first.md`. + ## Decisions so far (summary, 2026-11-09) - **Start page:** `mockups/nav-d.html`, with two gates (work on the left, off the clock on the right) and a small "wander through everything at once" link to the garden (`nav-c.html` idea). diff --git a/docs/plans/009-work-page-cv-first.md b/docs/plans/009-work-page-cv-first.md new file mode 100644 index 0000000..43cf369 --- /dev/null +++ b/docs/plans/009-work-page-cv-first.md @@ -0,0 +1,88 @@ +--- +status: approved +--- + +# Plan 009 — `/work/`: CV first, six proud projects, record of competitions and courses + +Spec: `docs/specs/009-work-page-cv-first.md`. Mockup: `mockups/work-k2.html`, `mockups/shots/work-k2-1440.png` +(built from `mockups/tech-r3-c.html`, whose featured panels are already the site's `Featured.astro`). +Branch: `feat/work-page-cv-first`. Commands: `bun run typecheck`, `bun test`, `bunx playwright test` (`--workers=2` +if pages crash). + +**Commit rule.** Tasks 1–2 (data and pure logic) are committed as they finish. Tasks 3–9 change what visitors see: +build and test them, but leave them **uncommitted** until the owner has looked at the rendered preview (his standing +rule: visual changes are shown before they are committed). Task 10 is the preview. + +TDD for every task: write the failing test, run it and see it fail, write the code, see it pass. +Test imports use explicit `.ts` extensions. `src/core` stays pure (no imports from other `src/` folders, no I/O). + +## 1. Content: `recognition.yml` and `courses.yml` (commit) +- [ ] `test/library/load.test.ts`: both files load (order kept for recognition); missing files → empty lists; one error + per problem with file and field: missing required field, wrong `kind`, bad `completed` date (incl. 2025-02-30), + non-positive or non-integer `minutes`, non-boolean `certificate`/`highlight`, bad `url`, `status` on a + competition or not `ongoing|retired`, `keywords` not a list of text, unknown key, file not a list, entry not a map. +- [ ] `src/library/types.ts`: `Recognition` (`title, kind: 'competition'|'volunteering', result, highlight, detail?, + year?, url?, status?`) and `Course` (`title, provider, kind: 'course'|'lab', topic, completed, minutes, + certificate, url?, keywords: string[]`); `Content.recognition`, `Content.courses`. +- [ ] `src/library/load.ts`: read both optional files (a missing file is not an error); validate as above. +- [ ] `fixtures/content/recognition.yml`, `fixtures/content/courses.yml`: synthetic, enough to exercise every branch + (≥ 4 highlighted entries so the "+N more" shows; both kinds; one with `url`, one `retired`; ≥ 3 topics, labs and + courses, some without certificate). `fixtures/sparse/` gets neither file. +- [ ] `docs/CONTENT-CONTRACT.md`: both files, as in the spec; `intro` no longer shown on `/work/`. +- [ ] Commit `feat(library): recognition.yml and courses.yml`. + +## 2. Pure course logic in `src/core/courses.ts` (commit) +- [ ] `test/core/courses.test.ts`: `courseSummary(courses)` → `{ count, certificates, minutes, since (YYYY-MM), topics: + [{ topic, courses, labs, certificates, minutes }] }` with topics ordered by minutes desc then name; + `courseMatches(course, query)` (case-insensitive over title, provider, topic, keywords; empty query → false); + `formatHours(minutes)` ("9.4h"; "~27 h" form for the totals is the caller's); `monthYear('2025-02')` → "Feb 2025". +- [ ] `src/core/courses.ts` (takes a plain course shape, not the library type). Commit `feat(core): course summary and search`. + +## 3. Six featured panels and muted screenshots (do not commit) +- [ ] Test for the pure part in `sections.ts`: `featuredOf` returns up to 6; `featLayout(n)` is + `['wide','','','wide rev','','']` sliced to n, with a trailing lone half made `wide`: + n=1 → wide; n=2 → wide, wide; n=3 → wide, half, half; n=4 → … wide rev; n=5 → … wide rev, wide; n=6 → as listed. +- [ ] `Featured.astro` uses it; heading "Projects I'm proudest of", hint, AI legend line at the right (moved from intro). +- [ ] CSS: `.feat` image stages and `.row` thumbnails muted (`saturate(.5) brightness(.8)`), full colour on + `:hover`/`:focus-within`; transition 300 ms, none under `prefers-reduced-motion`. Drawn showcases untouched. +- [ ] Fixtures: six featured fixture projects (add `featured` to existing synthetic ones / add synthetic ones). + +## 4. CV header (do not commit) +- [ ] `src/site/components/work/WorkHeader.astro` replaces the intro block and `NowStrip.astro` (delete it if unused). + Content and fallbacks exactly as spec §1. Uses `courseSummary`. +- [ ] `test/site/build-pages.test.ts`: header rows, highlights (max 3, "+N more"), keeping-up count/line/chips, + blocks left out on the sparse fixture, `site.now` list. + +## 5. Also made + certificate search (do not commit) +- [ ] `ProjectList.tsx`: heading "Also made"; new prop `courses` (minimal fields); when the query is non-empty show the + matching-courses strip (max 5, "+ N more on the learning page →" to `/work/learning/?q=`), and the count text + "

project(s) · course(s) match" (spec: courses, labs included; a seal marks the ones with a certificate). +- [ ] Tests: unit test for the strip's data (pure helper) + Playwright check in `e2e/work.spec.ts`. + +## 6. Record section (do not commit) +- [ ] `src/site/components/work/Record.astro` (`#record`) as spec §4; `workSections` gains `record`. +- [ ] Build test: both cards, groups, accent on highlights, status words, years only when present, topic table. + +## 7. `/work/learning/` (do not commit) +- [ ] `src/site/pages/work/learning.astro` (only when courses exist) + `src/site/scripts/learning-filter.ts` (plain + script: search, topic buttons, `?q=`, "No course matches"). +- [ ] Add to the sitemap page list (`src/site/feeds.ts`), not to feeds. +- [ ] Tests: build test (rows newest first, no page without courses), sitemap test, Playwright (filter, `?q=`, + no-JS shows all rows in `e2e/nojs.spec.ts`). + +## 8. Top bar and footer (do not commit) +- [ ] `TopBar.astro`: Projects (`#featured`), Record (`#record`), Writing, CV — only existing sections; on + `/work/learning/` the links point to `/work/#…`. +- [ ] `Work.astro`: no Bluesky link. Personal footer and `/simple` unchanged. Tests for both footers. + +## 9. Checks and docs (do not commit) +- [ ] `bun run typecheck`, `bun test`, `bunx playwright test` all pass; update existing tests that asserted the old + intro, "All projects"/"Everything else" headings, the Now strip or a four-panel cap. +- [ ] Axe checks in `e2e/a11y.spec.ts` cover `/work/` and `/work/learning/`. +- [ ] `docs/ARCHITECTURE.md` (new files, `src/core/courses.ts`, learning page), `docs/DECISIONS.md` (the [call]s), + `DESIGN.md` work section, `docs/TODO.md` (anything noticed and left), spec status → `implemented` after review. + +## 10. Preview for the owner (main session) +- [ ] Build a temporary copy of the real content with the proposed `recognition.yml`, `courses.yml`, featured ranks + and showcases (scratchpad `content-proposal/`); serve on port 4392; screenshots at 1440 and 390 in `~/`. +- [ ] Wait for his look; then commit tasks 3–9 in small Conventional Commits; remove this plan before merging. diff --git a/docs/specs/009-work-page-cv-first.md b/docs/specs/009-work-page-cv-first.md new file mode 100644 index 0000000..e98545f --- /dev/null +++ b/docs/specs/009-work-page-cv-first.md @@ -0,0 +1,178 @@ +--- +status: approved +--- + +# 009 — `/work/`: CV first, six proud projects, a record of competitions and courses + +Designed with the owner on 2026-11-12 over six rounds of rendered mockups (log in `docs/inspiration.md`, +"Work page, CV first"). He picked **K** and then its refinement, built on the approved `mockups/tech-r3-c.html`: +"This looks like a good improvement. Lets make it work!" Design truth: `mockups/work-k2.html` (screenshot +`mockups/shots/work-k2-1440.png`). Extends `docs/specs/001-site.md` §8 (the work space). Choices marked **[call]** +were made while writing the spec, not by the owner. + +## Why +The owner has made many projects of uneven quality, and the page gave them all the same weight; there was no place for +his courses, certificates, competitions or volunteer work. In his words, a visitor should first see the CV in ten +seconds, then "the most impressive projects I've made first, with the other less important ones still viewable … but +less focused", and near the top "the certificates/courses and most important accolades, with fuller information near +the bottom". Courses should show that he keeps up to date and "actively works to keep himself knowledgeable", with a +searchable list "somewhere, but it doesn't need to be front and center". + +## What + +### Page order on `/work/` (top to bottom) +1. **CV header** (replaces today's intro block and the Now / Latest writing / CV strip). +2. **Projects I'm proudest of**: the featured projects as large panels (today's `Featured`, extended to six). +3. **Also made**: today's project list (tabs, search, thumbnails, side sheet) with the remaining projects. +4. **Record**: recognition & volunteering next to keeping up (courses), the full versions. +5. **Writing** and **Where I've worked**, as today. +6. Footer. + +Every section that has no content is left out, and the top bar links only to sections that exist (as today). + +### 1. CV header +One card, two columns (stacked on narrow screens): +- **Left, "CV in ten seconds"**: `site.name` as the heading, `site.tagline` under it; rows *now* (`cv.now`), *before* + (`cv.before`, one per line), *degree*, *contact* (email); if `site.now` has lines they are shown as a short list + under the rows **[call]** (today's "Now" cell has no other home). Buttons: CV PDF (only when `links.cv`), "full + history ↓" (to `#cv`), GitHub, LinkedIn. +- **Right, two blocks**: + - **Highlights**: recognition entries marked `highlight: true`, in file order, at most **3** **[call]**; each title + and result in the accent colour. A link "+ N more in the record ↓" when the record holds more entries than shown. + No highlighted entries: the block is left out. + - **Keeping up**: a large certificate count with the seal mark ("18 certificates"), then one mono line: + " courses & hands-on labs · ~ h since "; then up to **5** topic chips, + " ", topics ordered by total time, largest first **[call]**; topics are short names + (one field serves chips, table and filters, so content keeps them short, e.g. "Ansible", "RAG & LLMs"); link "all courses ↓" (to the + record). No courses: the block is left out. No certificates but courses: the count line leads instead. + - Both blocks missing: the card is one column. +- The page's AI explanation moves to the right of the "Projects I'm proudest of" heading: one short line plus the + legend marks. **[call]** `site.intro` is no longer shown on `/work/`; `docs/CONTENT-CONTRACT.md` says so. + +### 2. Projects I'm proudest of +- Heading "Projects I'm proudest of", count, hint "hover the drawings · open a panel for the full story". +- Up to **6** featured projects (today: 4), by `featured` rank. Layout by position, repeating: + `1 wide · 2–3 halves · 4 wide reversed · 5–6 halves`. With fewer than six the pattern stops where they end; an odd + last half takes the full row width as a wide panel **[call]**. +- Panels are today's: showcase (or image) + number, group and where, title, summary, the *why* / *interesting* + facts from the body (`panelFacts`, unchanged: rows with no matching section are left out, never placeholders), + stack chips, "Read the full story" / "Read more", AI mark, filter note when hidden. +- **Screenshots are muted**: an `image` in a panel (and a thumbnail in the list) is shown desaturated and slightly + darker (about half saturation, 80% brightness) and comes to full colour when the pointer is over its panel or row, or + the panel has keyboard focus within. Drawn showcases are not muted. Owner: full greyscale "makes the page look boring + and not interactable"; the colour on hover "is nice". Under `prefers-reduced-motion` the change is instant. + +### 3. Also made +Today's `ProjectList` with the non-featured projects, heading "Also made" (was "All projects" / "Everything else"). +Behaviour unchanged (tabs, search, thumbnails, side sheet, AI filter), plus: +- **Search finds certificates too.** When the search box has text, the courses whose title, provider, topic or + keywords match are listed under the search, above the project rows, as a compact strip: seal mark when there is a + certificate, title, "lab" tag for labs, provider · month year · duration. At most **5** shown, then + "+ N more on the learning page →" linking to `/work/learning/?q=`. The count next to the heading reads e.g. + "1 project · 5 courses match" (labs count as courses here; the seal marks which carry a certificate) **[call]**. **[call]** Courses never appear when the search is empty, and they are not + affected by the AI preference (courses carry no AI level). + +### 4. Record (`#record`) +Two cards side by side (stacked on narrow screens). Either card is left out without content; with neither, the +section is left out. +- **Recognition & volunteering**: two groups, "Competitions" and "Volunteering" (a group with no entries is left + out), entries in file order. Each row: title (a link when `url` is given, with its host and ↗), an optional small + detail after it, and at the right the result; for volunteering, the role and then "ongoing" or "site retired" when + `status` says so. `highlight: true` entries show title and result in the accent colour. Years appear only when given. +- **Keeping up**: summary line (seal, " certificates", "from courses and hands-on labs", "~ hours of course + time since "), then a table by topic, ordered by total time: topic · " courses · labs" (a part + that is zero is left out) · seal + certificate count · hours (one decimal, "h"). Then a link + "All courses and certificates, searchable →" to `/work/learning/`. +- Hours are course time only (from `minutes`); the page says "course time", never more. + +### 5. `/work/learning/` (new page) +A quiet page in the work frame: heading "Courses & certificates", the same summary line, a search field and topic +filter buttons ("All ", then each topic with its count), and a table, newest first: completed (date), course (title, +a link when `url` is given; "lab" tag for labs), topic, provider, certificate (seal or —), time. +- Complete without JavaScript: the full table is in the HTML. A small plain page script (no React) filters rows by the + search text (title, provider, topic, keywords) and the topic button, and reads `?q=` on load. Rows not matching are + `hidden`; a "No course matches" line appears when none do. +- In the sitemap; not in the feeds. Linked from the record, from the search strip, and in the top bar of this page. +- Without any courses the page is not built and nothing links to it. + +### 6. Top bar and footer (work space) +- Top bar links on `/work/`: Projects (`#featured`), Record (`#record`), Writing, CV, each only when its section exists. + "All projects" goes; the list is reached by scrolling or from Projects. **[call]** +- Work footer: back to the gate, `/simple`, GitHub, LinkedIn, email. **The Bluesky link is removed from the work + footer** (owner, 2026-11-12). The off-the-clock footer and `/simple` keep it. + +### Content: two new optional files (content repo root) +`docs/CONTENT-CONTRACT.md` documents both. Both are optional; a missing file means no entries. **[call]** No +`contract` bump: an older app ignores unknown files and a newer app reads content without them (the same reasoning as +spec 008's `pins`). + +`recognition.yml`, a list, file order = display order: +```yaml +- title: AUHackathon 2019 # required + kind: competition # required: competition | volunteering + result: winner · best AUHack # required for competitions; for volunteering the role, e.g. "IT & website" + highlight: true # optional, default false; candidates for the header (first 3) + detail: four years # optional short text after the title + year: 2019 # optional text ("2019", "2016–2019"); shown only when present + url: https://example.invalid # optional http(s) + status: ongoing # optional, volunteering only: ongoing | retired +``` + +`courses.yml`, a list (any order; the site sorts): +```yaml +- title: Ansible Fundamentals # required + provider: Pluralsight # required + kind: course # required: course | lab + topic: Ansible # required, a short name; courses with the same text group together + completed: 2025-04-18 # required, a real calendar date + minutes: 224 # required, positive integer (course time only) + certificate: true # optional, default false + url: https://example.invalid # optional http(s) + keywords: [ansible, automation] # optional list of text, used by search only +``` +Validation follows the existing loader: every problem is listed with its file and field; unknown keys are errors +**[call]** (catches typos like `certifcate`), as for projects. + +### Content changes the owner makes (not in this repo) +For the real site, in `portfolio-next-content`: `featured` ranks for the six (Gacha 1, Config 2, Bachelor Report 3, +Mixed-Reality Rowing Game 4, Student Dashboard 5, VR-Classroom 6), `showcase: config-editor` on Config, +`peer-network` on Bachelor Report, `rowing-stroke` on the Rowing game; `## Why` and `## What's interesting` sections +in project bodies where he wants the facts rows; `recognition.yml` from his CV lines; `courses.yml` from his +spreadsheet "Courses and Learning.xlsx" (the WordPress course has no completion date and stays out until it has one). +The implementation prepares these as a folder outside both repos (the session scratchpad, `content-proposal/`), +uses it only through a temporary copy of the real content for the preview, and hands it to the owner; it never writes +to the `portfolio-next-content` clone. Rules for that set: +- Only facts he gave: the four CV lines and the two volunteer roles as he wrote them; unknown years are left out + (no placeholders on the real site). No `## Why` / `## What's interesting` text is written for him; panels without + those sections simply show no facts rows. +- Spreadsheet mapping **[call]**: one row per completed course (rows without a completion date are left out); + `kind: lab` when "Course Type" contains "Lab"; `minutes` from "Course Hours"; `certificate: true` when + "Certificate Available?" is "Yes" (he asked for the page to "show that I got certificates from them"; Pluralsight + issues a certificate for every completed course that offers one); `keywords` from "Keywords"; `url` from "Link". + `topic` is a hand grouping of "Bottom Category" into short names, the same text in chips, table and filter: + Serverless → "Serverless / AWS", Ansible → "Ansible", Machine Learning and LLMs/RAG → "RAG & LLMs", + Linux & System Administration → "Linux", Security → "Security", Metrics/logging → "Observability". + +## Non-goals +- No new drawn showcases (Gacha, Student Dashboard, VR-Classroom use their screenshots). +- No Skill IQ percentiles (left out on purpose during design). +- No change to the side sheet, project pages, writing pages, the off-the-clock side or `/simple` (beyond what is + named above). +- No certificate PDFs or images. + +## Anti-goals (owner's hard lines) +Nothing moves unless the visitor acts; no trophy icons, badges walls or anything that sells; no uneven "bento" +mosaic (tried in rounds 2–4 and rejected as "too chaotic and unfocused"); no greyscale screenshots. + +## Acceptance +- `/work/` on the fixtures shows, in order: CV header (with highlights and keeping up), Projects I'm proudest of, + Also made, Record, Writing, Where I've worked; each section disappears when its content is missing. +- Six featured fixture projects lay out as wide, half, half, wide reversed, half, half at ≥ 1100 px; one column on a + phone; five featured ends with a wide panel. +- Screenshot panels and list thumbnails are muted until hovered; drawings are not. +- Searching the list for a fixture keyword shows matching courses with the right count and the learning-page link. +- `/work/learning/` lists every fixture course newest first; search and topic filter hide rows; `?q=` pre-filters; + without JavaScript every row is visible. +- The work footer has no Bluesky link; the off-the-clock footer still does. +- `validate` reports each malformed field of `recognition.yml` and `courses.yml`, by file and field. +- Typecheck, `bun test` and Playwright pass; the page is checked at 1440 px and 390 px. diff --git a/mockups/shots/work-k2-1440.png b/mockups/shots/work-k2-1440.png new file mode 100644 index 0000000..084a5d4 Binary files /dev/null and b/mockups/shots/work-k2-1440.png differ diff --git a/mockups/work-k2.html b/mockups/work-k2.html new file mode 100644 index 0000000..f090687 --- /dev/null +++ b/mockups/work-k2.html @@ -0,0 +1,1060 @@ + + + + + + +Work · Lucas Winther + + + + + + + + +off the clock → + +

+
+
← gateLucas Winther/ work
+ +
made +
+ +
+
+
+
+ +
+
+
+
+
●  CV in ten seconds
+

Lucas Winther

+

Computer Scientist with passion for development.

+
+ nowIT-medarbejder, IT Research Tech, Aarhus University 2025–now + beforeIntern, ScienceAtHome 2019
Student helper, Local Configuration Management, TERMA Group 2016–2018
+ degreeBachelor in Computer Science + contactlucas@lucaswinther.info +
+ +
+
+
Highlights
+
+
AUHackathon 2019
winner · best AUHack
+
First Lego League
won round 1, twice
+
Google Hash Code 2021
top 12%
+
+ 3 more in the record ↓
+
Keeping up
+
18certificates
+
23 courses & hands-on labs · ~27 h since Feb 2025
+
Ansible 5Serverless / AWS 5RAG & LLMs 4Security 2Linux 1
+ all courses ↓
+
+
+ + + + + +
+

Also made

13 projects
+
+
+ +
+
+
+
+ +
+

Record

the full version of the highlights
+
+
Recognition & volunteering
+
+
Competitions
+
AUHackathon 2019
winner · best AUHack
+
First Lego League · four years, years?
won round 1, two years running
+
Google Hash Code 2021
top 12%
+
De Danske Cybermesterskaber 2024
regional participant
+
Volunteering
+
Art Bubble · art-bubble.dk ↗
IT & website · since ? · ongoing
+
Lystrup Genbrugser
IT & website · years? · site retired
+
+
Keeping up
+

18 certificates from 23 courses and hands-on labs · ~27 hours of course time since Feb 2025

+
topic
done
certificates
time
Ansible & configuration
2 courses · 3 labs
5
9.4h
Linux administration
1 course
1
6.7h
Security · JWT, ISO 27001, honeypots
2 courses · 1 lab
2
4.9h
Serverless on AWS
5 courses · 3 labs
5
3.9h
RAG & LLM systems
4 courses · 1 lab
4
1.8h
Observability · Grafana
1 course
1
0.4h
+ All courses and certificates, searchable →
+
+
+ + +
+
+

Writing

AI, devops, homelabblog.lucaswinther.info →
+
+
+
+

Where I've worked

↓ CV (PDF)
+
    +
  • 2025 – now
    Aarhus University · IT-medarbejder, IT Research Tech +

    Building and running software for researchers:

    +
    • a scalable, easy-to-use compute job system on Slurm, with a custom React/Node web app, scaling on Oracle Cloud, OAuth/Entra ID login and AU's ERDA storage
    • +
    • document and information services, integrating Overleaf and OpenProject
    • +
    • trying newer software while keeping it secure, containerised, updated and monitored: OpenBao/Vault, Grafana, Docker, Ansible
    +
    DevOpsDockerLinux adminobservabilitycloudfull-stackleadership
  • +
  • Jul 2019
    ScienceAtHome · internship +

    Joined ideation and planning on a new project, built an early prototype of its base mechanics to show the people it was for, and pair-programmed with experienced developers to start it.

  • +
  • 2016 – 2018
    TERMA Group · student helper, Local Configuration Management
  • +
  • degree
    BSc Computer Science · Aarhus University, 2022 +

    Thesis: HyperCache, reputation systems for peer-to-peer archival.

  • +
+
+
+
+ + + +
+ +
+ + + + + diff --git a/mockups/work-r1-options.html b/mockups/work-r1-options.html new file mode 100644 index 0000000..e364d82 --- /dev/null +++ b/mockups/work-r1-options.html @@ -0,0 +1,269 @@ + + + + + +Work page: three directions + + + + + +
+ +

Mockups · work page · everything uses your real titles, screenshots, CV lines and spreadsheet. The top bar, intro and CV strip are unchanged and left out.

+ + +
A

One grid, three sizes

All 13 projects in one grid. The six are big or medium tiles, and the rest are compact cards. Under it, a single "Record" band: competitions on the left, learning by topic on the right.

+
Risk: this is the closest to the "generic bento" look your DESIGN.md rules out. It's saved by the drawn showcases and the plain tiles, but it's the most template-like of the three.
+ +

Projects

13 · 6 pickedAll · Own · School · search
+
+
01 · Own · personal project

Event Tracker for Gacha Games

Used to easily figure out which live service games events to prioritize.

scrapingwebappjavascript
Read the full story →made with AI
+
drawn showcase · config-editor · hover
services:
  jellyfin:
    image: lscr.io/linuxserver/jellyfin
    volumes: [ /srv/media:/data ]
hosts: [ lucwin-01, lucwin-02 ]
sync: ✓ 2 hosts up to date
02 · Own · personal project

Config

A repository to store, sync and manage docker-compose based deployment on servers.

ansibleconfiguration management
Read the full story →made with AI
+
03 · School

Bachelor Report

Reputation systems in peer-to-peer archival.

Read more →by hand
+
04 · School

Student Dashboard

A concept dashboard, built upon conducted user studies.

Read more →by hand
+
drawn showcase · rowing-stroke · hover
05 · Own

Mixed-Reality Rowing Game

Two people, an Arduino and two real oars.

Read more →by hand
+
06 · School

VR-Classroom

A prototype website where you can register yourself, and then create + sign up for classes.

javascriptnode.js
Read the full story →by hand
+

Chessswap

Own · react
+

Monthly Expenses

Own · javascript
+

LoL Winrate Bot

Own · node.js
+

Censor Simulator

School · unity, VR
+

BreakoutPython

School · python
+

Tribute to Borlaugh

Own · html, css
+

Portfolio (2021)

Own · react
+
+ +

Record

competitions and learning
+
+

Competitions & recognition

+
+
2024
De Danske Cybermesterskaber
regional participant
+
2021
Google Hash Code
top 12%
+
2019
AUHackathon
winner · best AUHack
+
—
First Lego League · four years
won round 1, twice
+
+
+

Keeping up · 24 courses and labs since Feb 2025

+
+
Serverless on AWS
8 · 3 labs
+
Ansible & configuration
5 · 3 labs
+
RAG & LLM systems
5 · 1 lab
+
Security · JWT, ISO 27001, honeypots
3 · 1 lab
+
Linux admin, Grafana, WordPress
3
+
+ All courses, searchable → +
+
+ + +
B

Picked six, then a tight grid

The six get an even 3×2 grid of real cards. Everything else becomes a dense four-across grid of small cards, the same size as today's list rows but tiled. Accomplishments join the "CV in ten seconds" strip. Learning gets its own card next to Writing.

+
The calmest option and closest to today's structure. Accomplishments read as CV facts, which suits four entries. The learning card shows the latest few courses, so it looks alive as you keep going.
+ +
+

LATEST WRITING

A synthetic work post 03/14
+

CV IN TEN SECONDS

+
nowIT-medarbejder, IT Research Tech, Aarhus University (2025–now) + degreeBachelor in Computer Science + wonAUHackathon 2019, best AUHack · First Lego League, round 1 twice + placedGoogle Hash Code 2021, top 12% · DDC 2024, regional
+
+
+ +

Picked

6 projectshover the drawings
+
+
Own

Event Tracker for Gacha Games

Which live service game events to prioritize.

Read more →made with AI
+
config-editor · hover
services:
  jellyfin: ✓
hosts: [ lucwin-01, lucwin-02 ]
sync: ✓ up to date
Own

Config

Store, sync and manage docker-compose deployments.

Read more →made with AI
+
School

Bachelor Report

Reputation systems in peer-to-peer archival.

Read more →by hand
+
School

Student Dashboard

A concept dashboard built on user studies.

Read more →by hand
+
rowing-stroke · hover
Own

Mixed-Reality Rowing Game

Two people, an Arduino and two real oars.

Read more →by hand
+
School

VR-Classroom

Register, then create and sign up for classes.

Read more →by hand
+
+

Everything else

7All · Own · School · search
+
+

Chessswap

Own · react
+

Monthly Expenses

Own · javascript
+

LoL Winrate Bot

Own · node.js
+

Censor Simulator

School · unity, VR
+

BreakoutPython

School · python
+

Tribute to Borlaugh

Own · html, css
+

Portfolio (2021)

Own · react
+
+ +
+

Writing

(unchanged)
+

Learning · 24 since Feb 2025

+
+
Oct 2025Active Defense: Honeypotslab
+
Sep 2025Grafana Concepts and Basic Configuration
+
Aug 2025Vector Space Models and Embeddings in RAGs
+
Aug 2025Learning the Essentials of CentOS 7 Administration6h 43m
+
+
serverless 8ansible 5rag 5security 3linux 1
+ All 24, searchable → +
+
+ + +
C

One hero, uneven grid

An editorial grid that varies on purpose. The top pick is large with its drawing. The other five come in two shapes around it. The seven small projects fill the bottom as compact tiles. Below, a "Track record" section with the four accomplishments side by side and learning shown as topic bars.

+
The most character, and the "varied ways of showing information" principle at work, since the bars are a small graph. Downside: it needs a clear #1, and you'd choose the order of the six (I've put Config first because it has a live drawing).
+ +

Projects

13All · Own · School · search
+
+
drawn showcase · config-editor · hover
services:
  jellyfin:
    image: lscr.io/linuxserver/jellyfin
    volumes: [ /srv/media:/data ]
  immich:
    image: ghcr.io/immich-app/server
hosts: [ lucwin-01, lucwin-02 ]
sync: ✓ 2 hosts up to date
01 · Own · personal project

Config

A repository to store, sync and manage docker-compose based deployment on servers.

Read the full story →made with AI
+

Gacha Event Tracker

OwnAI
+
rowing-stroke

Mixed-Reality Rowing

Ownby hand
+

Bachelor Report

+

Student Dashboard

+

VR-Classroom

+

Chessswap

Own · react
+

Monthly Expenses

Own · javascript
+

LoL Winrate Bot

Own · node.js
+

Censor Simulator

School · unity, VR
+

BreakoutPython

School · python
+

Tribute to Borlaugh

Own · html, css
+

Portfolio (2021)

Own · react
+
+ +
+
CompetitionsThings I entered, and how it went.
+
+
2019
AUHackathon
winner · best AUHack
+
four years
First Lego League
won round 1, twice
+
2021
Google Hash Code
top 12%
+
2024
De Danske Cybermesterskaber
regional participant
+
+
Keeping up24 courses and hands-on labs since February 2025. Course time only, not the digging after.
+
+ Ansible
5 · ~10h + Linux admin
1 · 6.7h + Security
3 · ~5h + Serverless on AWS
8 · ~4h + RAG & LLMs
5 · ~2h +
All courses, searchable →
+
+ + +
+

/work/learning/: the searchable list (any option)

Its own quiet page, linked from whichever section you pick. Search plus topic filter, newest first. It's built from a content file you add a line to after each course.

+
+
All 24ServerlessAnsibleRAGSecurityLinuxOther
+ + + + + + + + +
CompletedCourseTopicProviderTypeTime
2025-10-08Active Defense: HoneypotssecurityPluralsightlab1h 30m
2025-09-07Grafana Concepts and Basic ConfigurationobservabilityPluralsightvideo25m
2025-08-16Security Compliance: ISO 27001securityPluralsightvideo56m
2025-08-08Learning the Essentials of CentOS Enterprise Linux 7 AdministrationlinuxPluralsightvideo · quiz ✓6h 43m
2025-05-29JWT FundamentalssecurityPluralsightvideo2h 29m
… 19 more
+
+ +
+ + + +
+
+ + + diff --git a/mockups/work-r2-grids.html b/mockups/work-r2-grids.html new file mode 100644 index 0000000..3255025 --- /dev/null +++ b/mockups/work-r2-grids.html @@ -0,0 +1,210 @@ + + + + + +Work page: round 2 + + + + +
+ + +

Round 2 · uneven grids with the small projects woven in · other work as its own kind of tile · certificates up front · search that also finds certificates. Dotted underline = a fact I don't have yet.

+ + +
D

Woven grid

Each big tile has a column of small tiles beside or under it, so the small projects fill gaps between the big ones instead of collecting at the bottom. Sizes vary on purpose: one large, some tall, some wide.

+
How it scales: the page repeats a fixed rhythm of slots (large + 2 small, tall + medium + small stack, …). New picked projects take the next big slot; everything else fills small slots in date order. You control which ones are big, not where they land.
+ +

Projects

15 · 6 pickedAllOwnSchoolFor othersSearch projects & certificates
+
+
drawn showcase · config-editor · hover
services:
  jellyfin:
    image: lscr.io/linuxserver/jellyfin
    volumes: [ /srv/media:/data ]
hosts: [ lucwin-01, lucwin-02 ]
sync: ✓ 2 hosts up to date
Own · personal project

Config

A repository to store, sync and manage docker-compose based deployment on servers.

Read the full story →made with AI
+
Own

Event Tracker for Gacha Games

Read more →made with AI
+

Chessswap

Own · react
+

Monthly Expenses Tracker

Own · javascript
+ +
rowing-stroke · hover
Own

Mixed-Reality Rowing Game

Two people, an Arduino and two real oars.

Read more →by hand
+
School · thesis

Bachelor Report

Read more →by hand
+
art-bubble.dkIT & website
For others · years?

Art Bubble

ongoingnot recorded
+

Lystrup Genbrugser

For others · site retired
+

LoL Winrate Discord Bot

Own · node.js
+

Censor Simulator

School · unity, VR
+

BreakoutPython

School · python
+

Tribute to Norman Borlaugh

Own · html, css
+ +
School

Student Dashboard

A concept student dashboard web-app, built upon conducted user studies.

+
School

VR-Classroom

+

Portfolio (2021)

Own · react
+
+ + +
E

Packed by size

Every project has a size (large, tall, wide, medium, small) and the grid packs them tightly in your order, letting small tiles slip into whatever gaps the big ones leave. Less hand-tuned than D, more organic, and it never needs re-laying out when you add things.

+
Trade-off: D's rhythm is predictable and tidy; E is more uneven and "found", but exactly where a small tile lands depends on what's around it. Same tiles, same order, as D.
+

Projects

15 · 6 pickedAllOwnSchoolFor othersSearch projects & certificates
+
+
config-editor · hover
services:
  jellyfin: ✓
hosts: [ lucwin-01, lucwin-02 ]
sync: ✓ 2 hosts up to date
Own

Config

Store, sync and manage docker-compose based deployment on servers.

Read the full story →made with AI
+
Own

Event Tracker for Gacha Games

Read more →made with AI
+
School · thesis

Bachelor Report

+
rowing-stroke
Own

Mixed-Reality Rowing Game

Read more →by hand
+
School

Student Dashboard

+
art-bubble.dkIT & website
For others

Art Bubble

+
School

VR-Classroom

+

Lystrup Genbrugser

For others · site retired
+

Chessswap

Own · react
+

Monthly Expenses Tracker

Own · javascript
+

LoL Winrate Discord Bot

Own · node.js
+

Censor Simulator

School · unity, VR
+

BreakoutPython

School · python
+

Tribute to Norman Borlaugh

Own · html, css
+

Portfolio (2021)

Own · react
+
+ + +
+

Record: competitions and keeping up (either grid)

Certificates are now the headline number and get their own column, marked with a small seal. Orange = what you flag as most impressive; the list just grows downward.

+
+

Competitions & recognition

4 entries · orange = flagged as a highlight

+
+
2024
De Danske Cybermesterskaber
regional participant
+
2021
Google Hash Code
top 12%
+
2019
AUHackathon
winner · best AUHack
+
yrs?
First Lego League · four years
won round 1, two years running
+
+
+

Keeping up

18 certificates from 23 courses and hands-on labs · ~27 hours of course time since Feb 2025

+
+
topic
done
certificates
time
+
Ansible & configuration
2 courses · 3 labs
5
9.4h
+
Linux administration
1 course
1
6.7h
+
Security · JWT, ISO 27001, honeypots
2 courses · 1 lab
2
4.9h
+
Serverless on AWS
5 courses · 3 labs
5
3.9h
+
RAG & LLM systems
4 courses · 1 lab
4
1.8h
+
Observability · Grafana
1 course
1
0.4h
+
+ All courses and certificates, searchable → +
+
+ + +
+

Searching the work page finds certificates too

The same search box over the grid. Projects that match stay in the grid (others dim); matching certificates appear in a strip right under the search, linking to /work/learning/.

+

Projects

1 project · 5 certificates matchansible
+
+
+

Projects

Config · stores, syncs and manages docker-compose deployments ansibleAI
+

Certificates & labs

+
Ansible FundamentalsPluralsight · Apr 2025 · 3.7h
+
Troubleshoot Ansible Connectivity labMar 2025 · 1.2h
+
Build a Production Ready Ansible Playbook labMar 2025 · 1h
+
+ 2 more →
+
+
+
+ + +
+

Other work also in "Where I've worked"

Besides the tile, the work history gets an "on the side" line, so the CV reads complete. Retired sites keep their line, just not the link (or link an archived copy).

+

Where I've worked

+
+
now
IT-medarbejder, IT Research Tech, Aarhus University (2025–now)
+
on the side
IT and website, Art Bubble (years?)
ongoing
+
IT and website, Lystrup Genbrugser (years?)
site retired
+
before
Intern, ScienceAtHome (2019)
+
+
+ +
+ + +
+
+ + + diff --git a/mockups/work-r3-calm.html b/mockups/work-r3-calm.html new file mode 100644 index 0000000..c4fcb59 --- /dev/null +++ b/mockups/work-r3-calm.html @@ -0,0 +1,256 @@ + + + + + +Work page: round 3 + + + + +
+ + +

Round 3 · calmer structures than D/E · Art Bubble and Lystrup Genbrugser moved out of the projects into a "Recognition & volunteering" box · Keeping up unchanged from round 2.

+ + +
F

Alternating bands

A strict, repeating rhythm instead of a mosaic: one big + a stack of four small, then two big side by side, then the first band mirrored. Only two band shapes, always aligned, so it reads as ordered while still mixing small projects in between the big ones.

+
Scales: each new picked project fills the next big slot; small projects fill the side stacks in date order. When the stacks are full, extra small ones form a last band of four across. Empty stack slots (dashed here) simply collapse.
+

Projects

13 · 6 pickedAllOwnSchoolSearch projects & certificates
+
+
drawn showcase · config-editor · hover
services:
  jellyfin:
    image: lscr.io/linuxserver/jellyfin
hosts: [ lucwin-01, lucwin-02 ]
sync: ✓ 2 hosts up to date
Own · personal project

Config

A repository to store, sync and manage docker-compose based deployment on servers.

Read the full story →made with AI
+
+

Chessswap

Own · react
+

Monthly Expenses Tracker

Own · javascript
+

LoL Winrate Discord Bot

Own · node.js
+

Censor Simulator

School · unity, VR
+
+
+
+
Own

Event Tracker for Gacha Games

Read more →made with AI
+
rowing-stroke · hover
Own

Mixed-Reality Rowing Game

Read more →by hand
+
+
+
+

BreakoutPython

School · python
+

Tribute to Norman Borlaugh

Own · html, css
+

Portfolio (2021)

Own · react
+
next small project
+
+
School · thesis

Bachelor Report

My bachelor thesis on using reputation systems in peer-to-peer archival.

Read the full story →by hand
+
+
+
School

Student Dashboard

Read more →by hand
+
School

VR-Classroom

Read more →by hand
+
+ + +
G

Picked down the left, index on the right

The six picked projects as roomy horizontal cards in one column. Beside them, from the very top, a compact index of everything else that stays in view while you scroll. The small projects are always on screen, never "the rest at the bottom".

+
The calmest and most editorial. Scales the easiest: the index just gets longer (and could fold by group). On phones the index drops under the six.
+

Projects

13 · 6 pickedAllOwnSchoolSearch projects & certificates
+
+
+
config-editor · hover
services:
  jellyfin: ✓
hosts: [ lucwin-01 ]
sync: ✓ up to date
01 · Own · personal project

Config

A repository to store, sync and manage docker-compose based deployment on servers.

Read the full story →made with AI
+
02 · Own

Event Tracker for Gacha Games

Used to easily figure out which live service games events to prioritize.

Read more →made with AI
+
03 · School · thesis

Bachelor Report

Reputation systems in peer-to-peer archival.

Read more →by hand
+
rowing-stroke
04 · Own

Mixed-Reality Rowing Game

A fun rowing game for two people, that uses an arduino and two real oars to be played.

Read more →by hand
+
05 · School

Student Dashboard

A concept student dashboard web-app, built upon conducted user studies.

Read more →by hand
+
06 · School

VR-Classroom

Register yourself, then create and sign up for classes.

Read more →by hand
+
+ +
+ + +
H

Two sizes, one even grid

Only two tile sizes on a regular four-column grid: picked projects take a 2×2 block, everything else a single cell. Same rhythm everywhere, so nothing feels random, and small projects sit right next to big ones.

+
Calm and classic. The catch: small projects become small cards with a picture (a bit larger than today's list rows), and the look edges toward a standard portfolio grid.
+

Projects

13 · 6 pickedAllOwnSchoolSearch projects & certificates
+
+
config-editor · hover
services:
  jellyfin: ✓
hosts: [ lucwin-01, lucwin-02 ]
sync: ✓ 2 hosts up to date
Own

Config

Read the full story →made with AI
+
Own

Event Tracker for Gacha Games

Read more →made with AI
+

Chessswap

Own
+

Monthly Expenses

Own
+
School · thesis

Bachelor Report

Read more →by hand
+

LoL Winrate Bot

Own
+

Censor Simulator

School
+
rowing-stroke
Own

Mixed-Reality Rowing Game

Read more →by hand
+
School

Student Dashboard

Read more →by hand
+

BreakoutPython

School
+

Tribute to Borlaugh

Own
+
School

VR-Classroom

Read more →by hand
+

Portfolio (2021)

Own
+
+ + +
+

Recognition & volunteering (any grid)

One box, two kinds of entry: things you competed in, and things you gave time to. Volunteer work isn't framed as your project, just as what you did there. Orange still marks what you flag as a highlight. Next to it, Keeping up from round 2, unchanged.

+
+

Recognition & volunteering

+
+
Competitions
+
AUHackathon 2019
winner · best AUHack
+
First Lego Leaguefour years running
won round 1, twice
+
Google Hash Code 2021
top 12%
+
De Danske Cybermesterskaber 2024
regional participant
+
Volunteering
+
Art Bubble art-bubble.dk ↗IT and website, as a volunteer
since ? · ongoing
+
Lystrup GenbrugserIT and website, as a volunteer · site since retired
years?
+
+
+

Keeping up

18 certificates from 23 courses and hands-on labs · ~27 hours since Feb 2025

+
+
topic
done
cert.
time
+
Ansible & configuration
2 courses · 3 labs
5
9.4h
+
Linux administration
1 course
1
6.7h
+
Security
2 courses · 1 lab
2
4.9h
+
Serverless on AWS
5 courses · 3 labs
5
3.9h
+
RAG & LLM systems
4 courses · 1 lab
4
1.8h
+
Observability
1 course
1
0.4h
+
+ All courses and certificates, searchable → +
+
+ +
+ + + +
+
+ + + diff --git a/mockups/work-r4-blocks.html b/mockups/work-r4-blocks.html new file mode 100644 index 0000000..0dc3ff0 --- /dev/null +++ b/mockups/work-r4-blocks.html @@ -0,0 +1,199 @@ + + + + + +Work page: round 4 + + + + +
+

Round 4 · taking F and H and removing what made them busy: every block is the same size, small projects come in blocks of their own (still at today's row size), screenshots are toned to the page until you point at one, and tiles carry only number, title, one line and the AI mark.

+ + +
I

Equal blocks, two across

A plain two-column grid where every block is identical in size. A block is either one picked project or a group of four small ones. After the first pair, a block of small ones takes every few slots, so the small projects show up among the big ones, not after them.

+
Why it should feel calmer than F/H: one shape only, aligned rows, the same image treatment on every tile, and much less text. Hover any tile to see its real colours.
+

Projects

13 · 6 pickedAllOwnSchoolSearch projects & certificates
+ + + +
J

Equal blocks, three across

The same idea, denser: three identical blocks per row, groups of three small projects per block. More fits on one screen; each picked project gets a bit less room.

+
The row of three makes the six read as "the main ones" at a glance.
+

Projects

13 · 6 pickedAllOwnSchoolSearch projects & certificates
+ + + +
?

Same blocks without the toning

For comparison: the first row of I with the screenshots at full colour. The white Bachelor Report and bright VR-Classroom screenshots are a big part of what made F and H feel noisy.

+ + +
+ + +
+
+ + + diff --git a/mockups/work-r5-full.html b/mockups/work-r5-full.html new file mode 100644 index 0000000..8b469b6 --- /dev/null +++ b/mockups/work-r5-full.html @@ -0,0 +1,404 @@ + + + + + +Work page: full-page directions + + + + + +services: jellyfin: image: linuxserver/jellyfinhosts: [ lucwin-01, lucwin-02 ]sync: ✓ 2 hosts up to date + + +
Round 5 · full pages + + +
+ + +
+
← gateLucas Winther / workprojects made: any waynot fully by AIby hand only
+
+
+
+
●  CV in ten seconds
+

Lucas Winther

+

Computer Scientist with passion for development.

+
+ nowIT-medarbejder, IT Research Tech, Aarhus University 2025–now + beforeIntern, ScienceAtHome 2019
Student helper, Local Configuration Management, TERMA Group 2016–2018
+ degreeBachelor in Computer Science + contactlucas@lucaswinther.info +
+
full history ↓GitHubLinkedIn
+
+
+
Highlights
+
+
AUHackathon 2019
winner
+
First Lego League
won round 1, twice
+
Google Hash Code 2021
top 12%
+
+ 3 more in the record ↓
+
Keeping up
+
18certificates · 23 courses & labs · ~27 h since Feb 2025
+
Ansible 5Serverless/AWS 5RAG & LLMs 4Security 2Linux 1
+ all courses ↓
+
+
+ +

Projects I'm proudest of

6marked by how much AI went into them · AIby hand
+ +
+
Also made

7 smaller and older projects · search

+ +
+ +

Record

the full version of the highlights
+
+

Recognition & volunteering

+
+
AUHackathon 2019
winner · best AUHack
+
First Lego League · four years
won round 1, two years running
+
Google Hash Code 2021
top 12%
+
De Danske Cybermesterskaber 2024
regional participant
+
Art Bubble · art-bubble.dk ↗
volunteer IT & website · ongoing
+
Lystrup Genbrugser
volunteer IT & website · site retired
+
+

Keeping up · 18 certificates

+
+
topic
done
cert.
time
+
Ansible & configuration
2 courses · 3 labs
5
9.4h
+
Linux administration
1 course
1
6.7h
+
Security
2 courses · 1 lab
2
4.9h
+
Serverless on AWS
5 courses · 3 labs
5
3.9h
+
RAG & LLM systems
4 courses · 1 lab
4
1.8h
+
Observability
1 course
1
0.4h
+
All courses and certificates, searchable →
+
+
+

Writing · 1 post

A synthetic work post · 14 Mar 2025
+

Where I've worked

nowIT Research Tech, Aarhus University (2025–now)beforeIntern, ScienceAtHome (2019)
Student helper, TERMA Group (2016–2018)
degreeBachelor in Computer Science
+
+
+
← back to the gate/simpleGitHubLinkedInlucas@lucaswinther.info
+
+ + +
+
← gateLucas Winther / workprojects made: any waynot fully by AIby hand only
+
+ +
+

Projects I'm proudest of

6AIby hand
+ + +
Also made · 7
+
+

Record

+

Recognition & volunteering

+
AUHackathon 2019
winner · best AUHack
+
First Lego League · four years
won round 1, two years running
+
Google Hash Code 2021
top 12%
+
De Danske Cybermesterskaber 2024
regional participant
+
Art Bubble · art-bubble.dk ↗
volunteer IT & website · ongoing
+
Lystrup Genbrugser
volunteer IT & website · site retired
+

Keeping up · 18 certificates · 23 courses & labs

+
+
Ansible & configuration
2 courses · 3 labs
5
9.4h
+
Linux administration
1 course
1
6.7h
+
Security
2 courses · 1 lab
2
4.9h
+
Serverless on AWS
5 courses · 3 labs
5
3.9h
+
RAG & LLM systems
4 courses · 1 lab
4
1.8h
+
All courses and certificates, searchable →
+

Writing · 1 post

A synthetic work post · 14 Mar 2025
+
+
+
← back to the gate/simpleGitHubLinkedInlucas@lucaswinther.info
+
+ + +
+
← gateLucas Winther / workprojects made: any waynot fully by AIby hand only
+
+

Lucas Winther

Computer Scientist with passion for development.
+
+
●  CV in ten seconds
+
nowIT-medarbejder, IT Research Tech, Aarhus University 2025–nowbeforeIntern, ScienceAtHome 2019 · Student helper, TERMA Group 2016–2018degreeBachelor in Computer Science
+
GitHubLinkedInEmail
+
Highlights
+
AUHackathon 2019
winner
First Lego League
round 1 ×2
Google Hash Code 2021
top 12%
+ + 3 more ↓
+
Keeping up
+
18 certificates
+
23 courses & labs · ~27 h since Feb 2025
+
AnsibleAWS serverlessRAGSecurityLinux
+
+ +

Projects I'm proudest of

6marked by how much AI went into them · AIby hand
+ + +
+ Also made + ChessswapMonthly Expenses TrackerLoL Winrate Discord BotCensor SimulatorBreakoutPythonTribute to Norman BorlaughPortfolio (2021) + · all projects, searchable → +
+ +

Record

the full version
+
+

Recognition & volunteering

+
AUHackathon 2019
winner · best AUHack
+
First Lego League · four years
won round 1, two years running
+
Google Hash Code 2021
top 12%
+
De Danske Cybermesterskaber 2024
regional participant
+
Art Bubble · art-bubble.dk ↗
volunteer IT & website · ongoing
+
Lystrup Genbrugser
volunteer IT & website · site retired
+

Keeping up · 18 certificates

+
Ansible & configuration
2 courses · 3 labs
5
9.4h
+
Linux administration
1 course
1
6.7h
+
Security
2 courses · 1 lab
2
4.9h
+
Serverless on AWS
5 courses · 3 labs
5
3.9h
+
RAG & LLM systems
4 courses · 1 lab
4
1.8h
+
All courses and certificates, searchable →
+
+
+

Writing · 1 post

A synthetic work post · 14 Mar 2025
+

Where I've worked

nowIT Research Tech, Aarhus University (2025–now)beforeIntern, ScienceAtHome (2019)
Student helper, TERMA Group (2016–2018)
+
+
+
← back to the gate/simpleGitHubLinkedInlucas@lucaswinther.info
+
+ + + +