From e1d93a9d0b9b8432d300a409a8fd6b8473be4f59 Mon Sep 17 00:00:00 2001 From: Cosmin Poieana Date: Fri, 4 Sep 2026 21:39:12 +0300 Subject: [PATCH 1/3] Rebuild template and distillation process for stronger positioning Catalin flagged the layout as broken and positioning as weak, sent an iOS-targeted CV as a second data point. Root cause was the same across all three profiles: Notable Work accumulates and never gets cut (14 entries for Catalin, 9 for Angel), so proof gets buried instead of leading. The template was still its first draft, missing running headers, page-break protection, and any proof device. - Cap Notable Work at 6 entries with a ranking rubric, demote the rest to a new Also section - Add proof: front matter (3-4 metric fragments) rendered as a stat band under the contact line - Rebuild templates/nomoreapply.typ: running header, accent bars, two-tone work entries, proof band, breakable:false on entries, fixed bullet spacing, dark CTA band - Fix two bugs in assemble-team.sh: team card pulled a full paragraph instead of the first one, and injected member text unescaped - Correct brand red back to #DC143C, matching the live site - Bump CI's pinned pandoc/typst to match local dev - Mine Catalin's iOS CV for facts, add target: field for role-targeted resources so intent doesn't get read as repositioning --- .claude/commands/sync-sources.md | 5 +- .github/workflows/build-pdfs.yml | 8 +- CLAUDE.md | 35 ++++--- docs/audit-trail.md | 16 +++ docs/blueprints/initial-structure.md | 37 ++++--- metadata.yml | 8 ++ resources/Catalin_Waack-cv-ios-04_09_2026.pdf | Bin 0 -> 8525 bytes scripts/assemble-team.sh | 20 +++- site/index.html | 10 +- sources/angel-aytov.md | 40 ++++++-- sources/catalin-waack.md | 51 ++++++---- sources/cosmin-poieana.md | 37 +++++-- templates/nomoreapply.typ | 92 +++++++++++++----- 13 files changed, 258 insertions(+), 101 deletions(-) create mode 100644 resources/Catalin_Waack-cv-ios-04_09_2026.pdf diff --git a/.claude/commands/sync-sources.md b/.claude/commands/sync-sources.md index 1202998..7673776 100644 --- a/.claude/commands/sync-sources.md +++ b/.claude/commands/sync-sources.md @@ -6,7 +6,7 @@ You are running the NoMoreApply source sync. This command is triggered after new - All team members (Angel Aytov, Catalin Waack, Cosmin Poieana) are male. Use he/him pronouns in all profile prose. - Bullet text in `sources/` must never contain manual line breaks. Write each bullet as a single continuous line; let the PDF engine wrap naturally. -- Brand red accent is `#e8002d`. Do not use `#DC143C`. +- Brand red accent is `#DC143C` (confirmed against the live nomoreapply.com; matches the `nma` repo source). - Writing style rules are in `CLAUDE.md`: no em dashes, no AI filler, concrete outcomes, active voice. ## 1. Identify updated resources @@ -25,7 +25,8 @@ For each person with new resources, follow CLAUDE.md procedure 2 (Syncing resour - Read **all** resource files for that person in `resources/` (not just the newest) - Synthesize into their `sources/*.md` file: brochure-style, not a CV dump -- The sharpest version of each section: Summary (2-3 sentences, lead with outcome), Expertise (5-8 bullets, technically specific, no manual line breaks), Notable Work (3-5 highlights with company + outcome), Tech Stack (categorized), Background (education, distinctions, community) +- The sharpest version of each section: Summary (2-3 sentences, lead with outcome and strongest claim, first paragraph self-contained since the team brochure extracts it verbatim), Expertise (5-8 bullets, technically specific, no manual line breaks), Notable Work (**capped at 6**, ranked by named brand → hard number → recency → positioning fit → technical distinctiveness; demote the rest to `## Also` as one-liners), Tech Stack (categorized), Background (education, distinctions, community) +- Update `proof:` front matter (3-4 metric-led fragments) if a new resource surfaces a stronger number or brand - Remove `` comments for any gaps that are now filled - Keep remaining TODOs for still-missing data - Log a source-level audit trail entry in `docs/audit-trail.md` (see CLAUDE.md format) diff --git a/.github/workflows/build-pdfs.yml b/.github/workflows/build-pdfs.yml index e363c59..060f45e 100644 --- a/.github/workflows/build-pdfs.yml +++ b/.github/workflows/build-pdfs.yml @@ -32,12 +32,12 @@ jobs: uses: actions/cache@v5 with: path: /tmp/pandoc.deb - key: pandoc-3.9.0.2 + key: pandoc-3.11 - name: Install Pandoc run: | if [ ! -f /tmp/pandoc.deb ]; then - curl -sLo /tmp/pandoc.deb https://github.com/jgm/pandoc/releases/download/3.9.0.2/pandoc-3.9.0.2-1-amd64.deb + curl -sLo /tmp/pandoc.deb https://github.com/jgm/pandoc/releases/download/3.11/pandoc-3.11-1-amd64.deb fi sudo dpkg -i /tmp/pandoc.deb @@ -46,12 +46,12 @@ jobs: uses: actions/cache@v5 with: path: /usr/local/bin/typst - key: typst-0.14.2 + key: typst-0.15.1 - name: Install Typst if: steps.cache-typst.outputs.cache-hit != 'true' run: | - curl -sL https://github.com/typst/typst/releases/download/v0.14.2/typst-x86_64-unknown-linux-musl.tar.xz \ + curl -sL https://github.com/typst/typst/releases/download/v0.15.1/typst-x86_64-unknown-linux-musl.tar.xz \ | tar -xJ --strip-components=1 -C /usr/local/bin typst-x86_64-unknown-linux-musl/typst - name: Build PDFs diff --git a/CLAUDE.md b/CLAUDE.md index 8d4fa36..be8c94f 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -10,15 +10,16 @@ PDF brochure pipeline for the NoMoreApply engineering collective. Converts per-p **Template:** `templates/nomoreapply.typ` — design aligned to nomoreapply.com brand. -**Design tokens:** +**Design tokens** (canonical table, keep in sync with `templates/nomoreapply.typ`): - Background: `#FAFAFA` (off-white) -- Text: `#09090B` (near-black) -- Accent: `#e8002d` (NMA brand red — role lines, team taglines only) -- Secondary: `#71717A` (muted grey) +- Text primary: `#09090B` (near-black, also the dark-band fill) +- Text secondary: `#52525B` +- Text tertiary / eyebrow: `#71717A` (muted grey), faint variant `#A1A1AA` +- Accent: `#DC143C` (NMA brand red, confirmed against the live nomoreapply.com — role lines, team taglines, accent bars only) - Dividers: `#E4E4E7` (light grey rules and card borders) - Font: Inter, weights 400/600/700 - Name: 26pt bold, tracking -0.02em -- Section headings: 7.5pt bold uppercase, tracking 0.1em, grey rule +- Section headings: 7.5pt bold uppercase eyebrow (`#A1A1AA`), tracking 0.12em, 2pt red accent bar above **Fallback option:** WeasyPrint/CSS - if Typst hits layout limitations. Document trigger and rationale in `docs/audit-trail.md` before switching. @@ -44,12 +45,17 @@ All prose in `sources/` must follow these rules. Apply them when extracting or e ## Source Markdown Schema -Each `sources/*.md` file must follow the same YAML front matter + H2 section structure so the template can consume them consistently. Sections in order: -1. `## Summary` -2. `## Expertise` -3. `## Notable Work` -4. `## Tech Stack` -5. `## Background` +Each `sources/*.md` file must follow the same YAML front matter + H2 section structure so the template can consume them consistently. + +**Front matter** additionally carries `proof:`, a list of 3-4 metric-led fragments (e.g. `"7 of 10 DAX companies"`). This renders as the stat band under the contact line. Avoid `~` in these fragments (Pandoc's Typst writer escapes it when substituting raw template variables, unlike body prose) — write `2B+` rather than `~2B`. + +**Body sections, in order:** +1. `## Summary` - 2-3 sentences. Lead with the outcome and the strongest claim, not biography. The team brochure (`scripts/assemble-team.sh`) extracts only the **first paragraph** (up to the first blank line) for the team card, so keep that opening paragraph self-contained and under ~50 words. +2. `## Expertise` - 5-8 bullets. The team brochure also extracts the **first 4 bullets** here, so lead with the strongest ones. +3. `## Notable Work` - **capped at 6 entries.** Write each as an H3 heading (company/project) followed by an italic meta line (`*Role · Years*`), then prose or bullets. Adding a 7th entry means demoting one to `## Also`. Ranking rubric, applied in order: named client or brand a buyer recognises → a hard number → recency → fit with current positioning → technical distinctiveness (ties break toward recency). Every full entry needs at least one number; no metric means it belongs in `## Also`. +4. `## Also` - one-liners for demoted or minor work. Keep brand names visible, cut the detail. +5. `## Tech Stack` - Categorized list: languages, frameworks, infra, AI/ML tools. +6. `## Background` - Education, distinctions, speaking, community. Gaps (e.g. missing CV data) are marked with `` comments inline. @@ -64,6 +70,7 @@ When new material arrives for a person (CV, LinkedIn export, website snapshot, p 1. Place the file in `resources/` with the naming convention `{FirstName}_{LastName}-{type}-{DD_MM_YYYY}.ext`, using today's date. 2. Add or update the corresponding entry in `metadata.yml`: file, person, type, source_url, added date, notes. 3. If this replaces an older file of the same type, keep the old file (historical record) and add the new one alongside it with the updated date suffix. +4. If the resource was written for a specific role or audience (e.g. a CV targeted at an iOS position), add a `target:` field to its `metadata.yml` entry recording that intent. A role-targeted resource describes the same work through a different lens: mine it for facts, never let its framing drive the person's positioning. Do not edit \`sources/\` yet. That is a separate step. @@ -74,8 +81,10 @@ When resources have been updated and the source markdown needs to reflect them: 1. Read the relevant files in `resources/` for the person being updated. 2. Extract and distill content into the person's `sources/*.md` file, following the schema above. This is a one-way sync: `resources/` is the source of truth. 3. Keep the prose tight: brochure-style, not a CV dump. Each section should be the sharpest possible version of the person's story. -4. Mark any gaps where data is unavailable with ``. -5. Do not touch other people's source files in the same operation. +4. **Enforce the cap.** `## Notable Work` never exceeds 6 entries. Adding one means ranking all candidates by the rubric in the schema section above and demoting the weakest to `## Also`. Never just append. +5. Update `proof:` in front matter whenever a new hard number or brand surfaces that outranks what's currently there. +6. Mark any gaps where data is unavailable with ``. +7. Do not touch other people's source files in the same operation. After editing `sources/`, the commit and push triggers CI. PDFs rebuild automatically. diff --git a/docs/audit-trail.md b/docs/audit-trail.md index d8b49f7..445a355 100644 --- a/docs/audit-trail.md +++ b/docs/audit-trail.md @@ -2,6 +2,22 @@ --- +**2026-09-04** - Positioning overhaul: brand red correction, distillation cap, template rebuild + +Decision: Corrected the brand accent from `#e8002d` back to `#DC143C` after confirming against the live nomoreapply.com (`about-*.js` and its CSS carry 13+ occurrences of `#DC143C`, zero `#e8002d`) and the `nma` repo source (19 occurrences). The 2026-04-09 "correction" to `#e8002d` was itself wrong. Added a `proof:` front-matter field (3-4 metric fragments rendered as a stat band) and a `## Also` section to the source schema, with `## Notable Work` capped at 6 entries and a ranking rubric (named brand → hard number → recency → positioning fit → technical distinctiveness). Rebuilt `templates/nomoreapply.typ`: running header on pages 2+, accent bars above section headings, two-tone H3 + italic-meta work entries, a proof band under the contact line, `breakable: false` on work entries so headings can't strand at page bottoms, coherent bullet spacing (the old `#set list` / `#show list: set par` pair contradicted each other), and one dark CTA band on the team brochure. Fixed two bugs in `scripts/assemble-team.sh`: the team-card summary window took the first 4 non-empty lines (pulling in a full paragraph plus testimonial) instead of the first paragraph, and member text was injected into Typst content unescaped. Bumped CI's pinned Pandoc/Typst (3.9.0.2/0.14.2 to 3.11/0.15.1) to match local dev, closing a toolchain gap that could pass locally and fail in CI. Added a `target:` metadata field for role-targeted resources (a CV written for a specific role describes the same work through a different lens; it should be mined for facts, not read as a repositioning signal). + +Rationale: Catalin's feedback ("layout looks broken and I think the positioning is too weak") traced to one root cause across all three profiles: the sync process accumulates Notable Work entries and never evicts (his had grown to 14, Angel's to 9), so proof gets buried in prose instead of leading the page. The template was still its original minimum-viable draft and implemented none of `nma/references/design.md`'s "proof over promises" or "no walls of text" principles. Considered switching to LaTeX per Catalin's suggestion; rejected, since the 2026-04-06 switch to Typst was for build speed (XeLaTeX took 3-5 minutes vs Typst's seconds) and every device his LaTeX CV uses (header, accent rule, two-tone entries) is a few lines of Typst once actually written. + +--- + +**2026-09-04** - Updated all three profiles: capped Notable Work, added proof bands, mined Catalin's iOS CV + +What changed: Catalin's `## Notable Work` cut from 14 to 6 full entries (ElectaCar/Navigator Insurance Brokers, HeyAmigo+AmigoEngine, VOXR, FAMFAM via DAYONE, Syntax, BreakEats), remainder moved to `## Also`. Role and Summary rewritten to lead with his "the model is rarely the bottleneck" positioning and DAX/government proof instead of a "started at 14" biography opening. Mined his new iOS-targeted CV for facts absent from the AI-consultant CV: ElectaCar's client is Navigator Insurance Brokers, 100+ vehicle models, Syntax's 100+ instructors and 27,000+ quiz results, AmigoEngine pairing, BreakEats' nine frequency bands and Swift/LiveKit/WebRTC detail, the new open-source TailRemote project, VoxR as revenue-share employment. Angel's Notable Work cut from 9 to 6 (kept AI Expert, DEMICON/Mercedes-Benz, Toyota Connected, Credit Suisse, Y TREE, Metapack; demoted Smart Wealth AG and Trading 212), and the unexplained 2009-2017 timeline gap against his "over 15 years" claim is now flagged with a `` instead of left silent. Cosmin's file was already at the 6-entry cap; no cuts, but promoted previously-buried proof (two acquisitions, 5,000+ job channels, 10k-user community, 2B+ tokens/month) into the new `proof:` field and reordered Notable Work by strength. + +Why: New resource added (`resources/Catalin_Waack-cv-ios-04_09_2026.pdf`, an iOS-role-targeted CV Catalin sent alongside his layout feedback). Cross-referencing it against the existing AI-consultant CV surfaced facts neither prior sync had captured. The cap and rubric come from the same-day schema change (see pipeline decision above) and were applied to all three profiles in one pass since the accumulation problem was universal, not Catalin-specific. + +--- + **2026-09-04** - Updated Catalin: refreshed CV and website resynced What changed: Corrected the 2024 job history: the "DAYONE, Senior Frontend" entry was conflating two different clients. FAMFAM (Keinemusik DJ collective music/event app, React Native/Expo/TypeScript, 12,000+ users, App Store Top 10 Music) is now its own entry via DAYONE; the AEM migration work is a separate client, Verlag des Österreichischen Gewerkschaftsbundes. Added ElectaCar (2026), Google Ads Operations Platform (2026), and expanded Rivoara to cover the paired Runtime Affiliate platform. Updated Heyamigo's npm downloads to 15,000+ (was 2,000). Rewrote Summary to lead with 20 years in tech, independent since 2018, the "model is rarely the bottleneck" positioning quote, and added the OneCode GmbH testimonial. Corrected location from Romania to Germany (remote, EU/international). Expanded Tech Stack with AI/agent tooling confirmed on both sources: LangChain/LangGraph, Haystack, RAGFlow, MCP, GEO/LLMO, Temporal, pgvector, Drizzle ORM, Google Ads API, Shopify Admin API. Corrected edeltravel/Luxury Essence entry to cover both the travel publishing platform (170+ articles) and the design framework, dated 2022-2023. diff --git a/docs/blueprints/initial-structure.md b/docs/blueprints/initial-structure.md index 6b372af..b8dad35 100644 --- a/docs/blueprints/initial-structure.md +++ b/docs/blueprints/initial-structure.md @@ -36,7 +36,7 @@ nomoreapply.github.io/services/ (public, always reflects latest push) ### How the team brochure summary works -`scripts/assemble-team.sh` extracts the first 4 lines of `## Summary` and first 4 bullets of `## Expertise` from each individual `.md` file, wraps them in Typst `#accentcard()` blocks, and injects them into the assembled team markdown before Pandoc + Typst renders the team PDF. Full profiles stay in their individual PDFs. +`scripts/assemble-team.sh` extracts the first paragraph (up to the first blank line) of `## Summary` and the first 4 bullets of `## Expertise` from each individual `.md` file, wraps them in Typst `#accentcard()` blocks, and injects them into the assembled team markdown before Pandoc + Typst renders the team PDF. Full profiles stay in their individual PDFs. Every value it injects is escaped for Typst special characters (`#`, `$`, `@`, `\`) before insertion, so raw member prose can never break the build. --- @@ -59,34 +59,40 @@ linkedin: "https://..." github: "https://..." # optional website: "https://..." # optional email: "..." +proof: + - "3-4 metric-led fragments, e.g. '7 of 10 DAX companies'" --- ``` **Body sections (in this order, H2 headings):** -1. `## Summary` - 2-3 sentence pitch. Lead with the outcome, not the role. -2. `## Expertise` - 5-8 bullet points. Core capabilities, technically specific. No manual line breaks inside bullets. -3. `## Notable Work` - 3-5 career highlights. Company name, what was built, measurable outcome. -4. `## Tech Stack` - Categorized list: languages, frameworks, infra, AI/ML tools. -5. `## Background` - Education, distinctions, speaking, community. +1. `## Summary` - 2-3 sentence pitch. Lead with the outcome and the strongest claim, not the role or biography. The team brochure extracts only the first paragraph verbatim, so keep it self-contained. +2. `## Expertise` - 5-8 bullet points. Core capabilities, technically specific. No manual line breaks inside bullets. The team brochure extracts the first 4. +3. `## Notable Work` - **capped at 6 entries**, each an H3 heading + italic meta line (`*Role · Years*`) + prose/bullets. Ranked: named brand → hard number → recency → positioning fit → technical distinctiveness. Every entry needs at least one number. +4. `## Also` - one-liners for work demoted from Notable Work, or minor engagements. Keep the brand name, cut the detail. +5. `## Tech Stack` - Categorized list: languages, frameworks, infra, AI/ML tools. +6. `## Background` - Education, distinctions, speaking, community. Gaps are marked with `` so they're visible in diffs. ### Per-person extraction guide -**Cosmin Poieana (`sources/cosmin-poieana.md`)** - complete, 0 TODOs +**Cosmin Poieana (`sources/cosmin-poieana.md`)** - complete, 0 TODOs, `proof:` front matter added 2026-09-04 (already at the 6-entry cap, no cuts needed) - Primary: `resources/Cosmin_Poieana-CV-06_04_2026.pdf` - Supplementary: LinkedIn profile PDF, Discord post, wandercode `About.tsx` - Remaining to pull (optional enrichment): wandercode.ltd service pages, portfolio starred list -**Catalin Waack (`sources/catalin-waack.md`)** - synced 2026-09-04 +**Catalin Waack (`sources/catalin-waack.md`)** - repositioned 2026-09-04 - Primary: `resources/Catalin_Waack-CV-04_09_2026.pdf` (supersedes `Catalin_Waack-CV-06_04_2026.pdf`, kept for history) +- Also mined: `resources/Catalin_Waack-cv-ios-04_09_2026.pdf` (role-targeted, `target: iOS-focused role` in metadata.yml, facts only) - Supplementary: LinkedIn profile PDF, Discord post, contra.com, `resources/Catalin_Waack-website-04_09_2026.txt`, electacar.com, rivoara.com +- Notable Work capped at 6 (was 14), rest demoted to `## Also`; `proof:` front matter added - All TODOs resolved -**Angel Aytov (`sources/angel-aytov.md`)** - 1 TODO remaining (speaking/community section) +**Angel Aytov (`sources/angel-aytov.md`)** - capped 2026-09-04, 1 TODO remaining (speaking/community section, plus a flagged timeline gap) - Primary: `resources/Angel_Aytov-profile-06_04_2026.pdf` (LinkedIn only - no CV yet) - Supplementary: Discord post, `resources/Angel_Aytov-aiexpert-09_04_2026.txt` (ai-expert.com), `resources/Angel_Aytov-github-09_04_2026.txt`, `resources/Angel_Aytov-website-09_04_2026.txt` - CV not yet available - Notable Work and Background certifications still incomplete +- Notable Work capped at 6 (was 9); 2009-2017 timeline gap flagged with `` rather than papered over - Role targets: AI Automation Architect, Principal Engineer, MLOps Engineer, Data Engineer, AWS Architect - Location: Dublin, Ireland @@ -108,9 +114,10 @@ Contains team-level front matter and intro paragraph. `scripts/assemble-team.sh` |---------|-------| | Paper | A4 | | Background | `#FAFAFA` (off-white) | -| Body text | `#09090B` (near-black) | -| Accent | `#e8002d` (NMA brand red - confirmed from nomoreapply.com source) | -| Secondary | `#71717A` (muted grey) | +| Body text | `#09090B` (near-black, also the dark-band fill) | +| Accent | `#DC143C` (NMA brand red - confirmed against the live nomoreapply.com) | +| Text secondary | `#52525B` | +| Text tertiary / eyebrow | `#71717A`, faint variant `#A1A1AA` | | Dividers | `#E4E4E7` (light grey rules and card borders) | | Font | Inter, weights 400/600/700 + Italic | | Name | 26pt bold, tracking -0.02em | @@ -176,9 +183,9 @@ Inter `.ttf`/`.otf` files in `templates/fonts/` are loaded directly by Typst (no Triggers on push to `main` touching `sources/`, `templates/`, `scripts/`, `site/`, `Makefile`, or the workflow file. Also supports `workflow_dispatch`. -Tool versions pinned: -- Pandoc: 3.9.0.2 -- Typst: 0.14.2 +Tool versions pinned (matches local dev toolchain): +- Pandoc: 3.11 +- Typst: 0.15.1 - actions/checkout: v6.0.2 - actions/cache: v5.0.4 - actions/upload-pages-artifact: v4.0.0 diff --git a/metadata.yml b/metadata.yml index 109820d..f65ff27 100644 --- a/metadata.yml +++ b/metadata.yml @@ -139,6 +139,14 @@ resources: added: 2026-09-04 notes: "Site rebuilt since April snapshot: AI consultant positioning, 'model is rarely the bottleneck' philosophy quote, deeper AI-specific tech stack (LangChain/LangGraph, Haystack, RAGFlow, MCP, pgvector, Drizzle, Temporal), Google Ads Operations Platform (2026, not in CV), Heyamigo downloads updated to 15,000+." + - file: Catalin_Waack-cv-ios-04_09_2026.pdf + person: Catalin Waack + type: cv + source_url: null + added: 2026-09-04 + target: "iOS-focused role" + notes: "Same career, iOS-role framing. Mine for facts only, not positioning: Navigator Insurance Brokers Ltd as ElectaCar's client, 100+ vehicle models, Syntax's 100+ instructors and 27,000+ quiz results, AmigoEngine pairing with HeyAmigo, BreakEats' nine frequency bands, new open-source TailRemote project, VoxR as revenue-share employment." + todos: - person: Angel Aytov missing: cv diff --git a/resources/Catalin_Waack-cv-ios-04_09_2026.pdf b/resources/Catalin_Waack-cv-ios-04_09_2026.pdf new file mode 100644 index 0000000000000000000000000000000000000000..b44d0f173f789f6ec859114cac4bb47d5bbd4ee6 GIT binary patch literal 8525 zcmd6N+19Gaw&wkM3Of)Kq!Ynjuop!I?65^Zq!AGG?A$eK)C<(PJNNahg@3NhT$wvZ z<;i_j{$u{9N;1PBdQG)!YH0dqq`gcdm2jkt zKz~0>|CNG*(DdWr9qA_gjY#3C;Ocy9G`?X2B1I-mDTNKl6!p3L)@pq-edELMdGZS* zuf^sdNQS~jruQG_%ht6N*7x&M>i@@7C?9yne`h}Ozd2v|hxxeFM-y@iTS?bIQ18D5;RjH z%H<#ABuTPVsp9{JoRz;L=l%5x;~IwjO}&z2wZ!~RuVj@imCFSE_w~yBJMtzz;F^i^ ze|!M5{ol#|7rLf!xPqNSVT&F)+T+Tqnm(50%LKC_?Z=( zC7Rdx;HU2aM_1_*$s{4gmWk3=v?ZMuTJ(WF;tSP2@%S_T#b43>1!W%~OptF81-fj0 zf))FKCZ?D_B``OBXqL%;zjnW0$Eo92xJ$t+0okPcw^YI(Y5v!!Uypu8scj13$U>kP=&cSNzWk>3(1{ zuzu9ZkLiVbzwSYlg1*>nKehS5E1Xz9GPMs9_de=|dNmR!D|i(r2^J?Ps)&<$9MAv4 z_Zi>-z5O^eb^B(U#sN+q3Fbflk)U&&f@IUT6CQgmr~1BS`=%KoDfu7v?e+b#8h^h@ zDQ5gi5*w1*c0adBDt<+8{q>HL%&G^z{*Dso(*KF1>^ShgBt%l(AWAgxkrqi!?f)(P2{%{Nkmx96qgSF*ZaE%@mhX zvvki)jQXi&5+5+XHxlTXn!feAr%0A6e}+nY$J8F*hSzl6Xz`rkL*-@WNa5%`YhKRY zJ7`SIe&OIRgK2|$BOzM|3VIxDxxs9;nvJ&;ZwK0|Hm=#V%ev6p+wDQ~`3l?`ll1Qef;>TZw5a(g=2In0QP zTONrzTP{m1*6*NhyCUx}msPg62hVA2saeWDQf)&@_|-er5}$}R3*_g99v0$90^ z^cU!(Q7DkcCX$UuOLd6ny4J_(>0HRb&mxNJ$Y`}+oa*h@5iaw2qt@*WvlOX!hwG6F zi-{ERv)@oG!xpavZoRu38@60>9jVY>2-9-o5_+ZSh!>w>Ru7dHqxnT$B4+g<%#xdJ z>U~wXkYAg%V#gs@>2tui_0XRSSb* zE>K5}Aouo2oogON425^5!pJxXt#X-dFIXl3aAM%@HNCt$6X3>|T%Xe_1HTk!UWhr0 zMBLo)Lj#A~>rPvuXueE|v8XL3b=5p=r0aW95A}X_5)sMGa{%VXT z;}yQ*Mty3Nb49K}k?GZXhBxq&VeRK!k*!{`u@bBH_GPVr4r`A)2LYz{n%`>GFEO!BqVO>#z|1OxszQKHd?{IJ(x|~=2}=uQpxOyTNWu~+kr+ozSers z0GpnBwK4>-{?Sd7XKesgX6W=~_t+b2WK@c$j>IDh?!vTwLx_?z5E>V6;f*jrmu%V3 zUvA6Rw2hCHCv#5c?AWL!u?6OB?RZ+<6!*}CE^dso}?YA$>mm@yNi zp`yHLuB+?qnA&kyOMR@YIW@dg`t45N!l6d!GWyox$9(f7wr75Eh5)%Y2M7y&HzV5Z zf~dP~t=liJIsCFMs=Wn3UEAncpY+dsws-H%3m}p89Q8T#Ld79UJybHIIRzN$(W4+@ z4B8wY7lSRkJIIw?X#wu3<4T~c13py6)v&o$p0DX;bq5@I5;rUiOEY9hk2*{Tph+yQ zzREoeyod29uUz3VC-_5X0}nBx^zx^E+YTRDcU`LZ^|W-!3a$2&IMgns1KpTBMAz*# z;ca7^ZMA4F6GK($P@GlsJ&^(w=%Tzhbl%NZb8E{h90`~`H<#J@a_n6yoB3%;WKNv2 zeee|u40fy)m==^3{dXFLn>-XaLOE z?iw}`>F6QEYA?2%P9|G*?mpg|dWL>lg*M0^Pwi|Ok!R#X8D-y85v%!|9ih5K{@KaA zcJtxLcci}5Fy?0+1MF8xqr_Wv= zXoF4e3Ozk`QrKkgg~b`w>sV=zH}3L+bUXB9+L)9UJ8zvoba$8yNKLT>$W2XXAKAMPIxZ5H;xxnmQk7Ky2^MGZ3_d@aJK8~aljqb(vw-qy>NVkbzkQX zfd?Q(8Yz|UmF0+CF}+oJ_KeC1(NSHg&mhmmt6Ut+0j?WNcb#`$ei@Au{Z3ms@zU!L zFMhmupW4y#H0Qb!_z<;;bb>GNRF5BzGz5*6g^&+dwN|I5@+-Hn$xLYXe41CX>&$Rs z=GDlHo^P?KO!5lG)xBBWhJ@Sj4qU62%O!KELsuzvi$)_@9T>gFPVx+dWW~wEe9kXT z_sC_k^iyrz%}TJ#&&hBuf%Vx4gCUU3K4iw%9CqGjfy36^^0hK0W0O&)GM|loj`N6f z)`4HmSRx~>6t8&kMQ3|Nv{dC`IUtMq{x9 zv-7<3seRpraXEVIMpaNRn!J*B150kMlVQXDx^g;*xBXfRD?(Ty5OH)sa`Qzo{icw2g74+UaaUi}J=~&pF{)TuNWY8PLaue`sMcL9pRh3YtA*JU z%dNQo)k^jmzt_g!cN~-5o8R7(|8BKSSI9qB+wELN=fKs4sw|%<^E}sA($>!ushRn1 zb(;lzgq-TrwKl63?H4XwU9?#}xYvTd_o_lu-FW84dWdg0mwQU8DaKoZ-yFIT%4MtS zqxwRWQ9s{sU(V`;`M@!U`uj%99)j$Ia#0jfxUAfHe1A=4m5o! z?gpl8)~zeMXm|>+ie2{*FKdRatZ!~0V>jMT^UbHAv4~iZz~KcdSC;dMk7hSB@M;b8 zo~?UWHYvz1?xZR7e5f?b4gwkIn0i=2~a;puceFARH>tj%P$+ zIP~D!hHIX~bdbJ^p45IDV=OGLpytVg<}f%C2Qie1LSZv^!sR-arK~hsujX~eKqmcG z=sc?V?WU6y(BwRJhsWC%MZEJOylZgSXU+gA$R#MMr9rt*l?TYC$`;DdSgKCnOP|l4 z7svv~AtcjP%IKbPNBZSles@AYI8XN(YCUM(maNm=IfQgQ?cIW2!|T=e##`5~ZeNWy zEwC)b=Tm%vY6?}@G0IK1bn>?_Bd68Ee(I7q-3u3Y`IISsU&~lS4pfJD z%WC%skp~>XF4nn?ooRMhYfWUlzWJKAp(<#h9zaXRo_EiKY@D6x=)Tj>nwESUSs zt!e!%EltzJTJ?^bQo+0rOW`b1?o0)JlPZMwH*%RT!sIA<_mD|%%PXU54cv%e9u;=e zjY$%%MW7@vHsz5ur_ zzk9AY44CuqbUj#B>Zj@edvHOoUCs#fh*{GzDbREKR`mh?bsrhpzUZ5~ZCfu@qwIHS0YZJ}AMg`n7V-!ipOoLry&QAu-UeTv23tp~K z52#Unrn_-Y+E&Spw#ZL?w9X7pkKTn^hC-*p`NBi!jjj77Ft*q6L71I#h)9x(?Be(U67tk z{O!0jAWKy6xRdk8+G}F_i+tf}>=rMdUb&CYo=&?u&cj#5i^(*c!NQ)?9oBK+*r7+y z;0;srbyZmBy(GX*_L)gzAUw_>;}&W14@ZXbyBF}T7bnrln&C+Hj!qsyUfhlz1P`JD zgVU=!xyYSO8D5X0!^w)STQR3qJYw-sg>zw=n*xWmQ{Q#%!DOkCb<#l2#@i}Prl>!m zJa)x36qkMb#pbzx4EEj82t+%zf;o=1?S8hKt90__yw|PvlgiXUpZjU?_?#5ajneDY zDDe}~a)#G~Avldo2g@hEs5WPr_P!|;wxC63r&9BDYNL@;7=qn)MbmrBOa`H=Avqn~ z`#1Lro^ua#I-_%GXqW3Fak?pm4X)e74jX^JPv2_TV_A%?QR4w$4n;*P_BQ&wQ7jeM zWDmi3b~fYntrj?IYlAxNXucZ7@9p{E!S1@%*)D1|bTu(9#C3-}f^qiXH{`x^2E~<+ z)SL6V*IkdsLcfDrG4(t;_t?YIac9}?7kRi%k?sEEP)?K>o;c7M%)z2Ebm7ICL+Sf+ zx;q!cNRew{V&03txn5?@u9&Ik)%KC^%hTR^&Ueoo1A$LP?OOqVl5TGTR?%dwwHW3Y z;n}C3_DCo~edDce+m)-(C?^GQp{G^qXm~~2h@mRY_WVRw@06N9RGRpCjpk-& zAal7Sy8@aCKHxEMnaNS2&}MfuRBwJ#7iS8VN+~7yl-agm|Iy05`lgx-XW8eqFxXkk zi5IW;$bMF!(N1Q3!oa9Ex$Q24eo@A6k!pl)oMzHX zShohEy_zK3T8l*1$J-qj1vgjpX3bemw6iz)s;gxC$+XM7x_>i>$$Cg;G>tISSYjJr z^e&TQ(9DQKfmDMTGccDdpf)!hsN!#Gz%`!=dsltS`(KhRo$JYPZ1w$?4F_<6Byj0w*V)|semJItVo0KI(J5^b7n z4b*9SkP7m_Ur7(dBkm^3%dDe5O zp<$edZ1a{!0=_!Q=u7hPo}HRtJ+^ukdUbH@{O-uy7RD$KkJdI`JGNM|CLiT#C}rDI zM*?C_W{=mxu-B;h_qcjb`+jt1<<)V4&^^Z(kG=Xu%1laor7!H6j^!Ly%knCZc8{l} z%z!QJEXdRDrn*`y=S}6Z?_jFmx!=>l`ZYSmYu8s45h$%z_$!OBi5vY%b@@|d-oD`} zqVf&@^_Qy9G)1Rwsb6W8`_g~Xx56anL4WAW zmXo8e-_r=3N_LL$`&w05iB49cW+{Z?k!+m+BOH;rihHOKKA@WYo3$tlU7 zeaV2LDZ@^Vm;Ufg!#8Z~-+~nJIa89pVNwtzCx2h(d&$YZ{Xfi)(Z6=$wdnQb228bz Me*=L2eDLl60vFAqjQ{`u literal 0 HcmV?d00001 diff --git a/scripts/assemble-team.sh b/scripts/assemble-team.sh index 822a370..2eceaca 100755 --- a/scripts/assemble-team.sh +++ b/scripts/assemble-team.sh @@ -13,6 +13,12 @@ strip_emdash() { echo "$1" | sed 's/ — / - /g; s/—/-/g' } +# Escape characters that are meaningful inside a Typst content block (#, $, @, \) +# so raw member prose can never break the build. +typst_escape() { + echo "$1" | sed 's/\\/\\\\/g; s/#/\\#/g; s/\$/\\$/g; s/@/\\@/g' +} + # Front matter: lines between first and second --- (exclusive of both) FRONT_MATTER=$(awk 'NR==1{next} /^---/{exit} {print}' "$TEAM_MD") @@ -29,11 +35,15 @@ TEAM_BODY=$(awk 'BEGIN{n=0} /^---/{n++; next} n>=2{print}' "$TEAM_MD" | sed 's/ } > "$OUT" for MD in "${MEMBERS[@]}"; do - NAME=$(awk -F'"' '/^name:/{print $2}' "$MD") - ROLE=$(strip_emdash "$(awk -F'"' '/^role:/{print $2}' "$MD")") - TAGLINE=$(strip_emdash "$(awk -F'"' '/^tagline:/{print $2}' "$MD")") + NAME=$(typst_escape "$(awk -F'"' '/^name:/{print $2}' "$MD")") + ROLE=$(typst_escape "$(strip_emdash "$(awk -F'"' '/^role:/{print $2}' "$MD")")") + TAGLINE=$(typst_escape "$(strip_emdash "$(awk -F'"' '/^tagline:/{print $2}' "$MD")")") - SUMMARY=$(awk '/^## Summary/{found=1; next} found && /^## /{exit} found && NF{print}' "$MD" | head -4 | sed 's/ — / - /g; s/—/-/g') + # First paragraph only (up to the first blank line) - the team card is a short + # pitch, not the whole Summary section. Prevents a long paragraph plus a + # trailing testimonial line from turning the card into a wall of text. + SUMMARY=$(awk '/^## Summary/{found=1; next} found && /^## /{exit} found && NF{print; printed=1; next} found && printed{exit}' "$MD" | sed 's/ — / - /g; s/—/-/g') + SUMMARY=$(typst_escape "$SUMMARY") # Expertise as Typst list items (one per line, indented) EXPERTISE_ITEMS=$(awk '/^## Expertise/{found=1; next} found && /^## /{exit} found && /^-/{print}' "$MD" | head -4 | sed 's/^- //; s/ — / - /g; s/—/-/g') @@ -42,7 +52,7 @@ for MD in "${MEMBERS[@]}"; do TYPST_LIST="" while IFS= read -r line; do [ -z "$line" ] && continue - TYPST_LIST="${TYPST_LIST} - ${line}"$'\n' + TYPST_LIST="${TYPST_LIST} - $(typst_escape "$line")"$'\n' done <<< "$EXPERTISE_ITEMS" { diff --git a/site/index.html b/site/index.html index 73aed87..2180ffe 100644 --- a/site/index.html +++ b/site/index.html @@ -44,7 +44,7 @@ transition: color 0.15s; } - .site-nav-about:hover { color: #e8002d; } + .site-nav-about:hover { color: #DC143C; } main { flex: 1; @@ -70,7 +70,7 @@ font-weight: 700; letter-spacing: 0.12em; text-transform: uppercase; - color: #e8002d; + color: #DC143C; margin-bottom: 0.75rem; } @@ -103,7 +103,7 @@ text-decoration: none; transition: background 0.15s; } - .brochure-cta:hover { background: #e8002d; } + .brochure-cta:hover { background: #DC143C; } .brochure-cta svg { flex-shrink: 0; } .divider { @@ -140,7 +140,7 @@ background: #fff; transition: border-color 0.15s, color 0.15s; } - .profiles a:hover { border-color: #e8002d; color: #e8002d; } + .profiles a:hover { border-color: #DC143C; color: #DC143C; } footer { text-align: center; @@ -150,7 +150,7 @@ border-top: 1px solid #e8e8e6; } footer a { color: #888; text-decoration: none; } - footer a:hover { color: #e8002d; } + footer a:hover { color: #DC143C; } footer .sep { margin: 0 0.5rem; } diff --git a/sources/angel-aytov.md b/sources/angel-aytov.md index 2f713b9..972ef81 100644 --- a/sources/angel-aytov.md +++ b/sources/angel-aytov.md @@ -7,6 +7,10 @@ linkedin: "https://www.linkedin.com/in/angel-aytov" github: "https://github.com/aytov" website: "https://aytov.com/" email: "angel@aytov.com" +proof: + - "Mercedes-Benz, Toyota, Credit Suisse" + - "HIPAA, GDPR, ISO/IEC 42001-compliant AI systems" + - "15+ years, FinTech to HealthTech to Automotive" --- ## Summary @@ -25,21 +29,41 @@ Angel builds AI and data infrastructure that goes beyond prototypes into regulat ## Notable Work -**AI Expert / AI Automation Architect** (2023–present, HealthTech): Building clinical research and patient decision support workflows. Delivered: a GraphRAG platform with hybrid retrieval and RAGAS evaluation; autonomous research agents for medical literature and clinical trial discovery; a real-time FastAPI gateway with WebRTC voice pipeline; full observability stack (OTEL, Langfuse) with PII redaction and sandbox validation before production exposure. +### AI Expert +*AI Automation Architect, HealthTech · 2023-present* -**DEMICON / Mercedes-Benz** (2022–2024): Senior AWS Cloud Engineer on the Mercedes-Benz automotive account. Built custom guardrails and monitoring using Node.js, Selenium, Lambda, Step Functions, and Grafana. Migrated Terragrunt to Terraform Enterprise. Configured GitLab CI/CD pipelines and automated scaling (EC2 ASG, ECS, RDS/Aurora). +Building clinical research and patient decision support workflows. Delivered a GraphRAG platform with hybrid retrieval and RAGAS evaluation, autonomous research agents for medical literature and clinical trial discovery, a real-time FastAPI gateway with WebRTC voice pipeline, and a full observability stack (OTEL, Langfuse) with PII redaction and sandbox validation before production exposure. -**Y TREE, FinTech** (2021–2022): Led implementation of a new ALM core module for financial life intelligence. Deployed microservices on AWS EKS with Kubernetes/Helm. Prototyped in Java/Kotlin (Spring Boot) and TypeScript (Express/Node.js). +### DEMICON via Mercedes-Benz +*Senior AWS Cloud Engineer · 2022-2024* -**Toyota Connected Europe** (2021): Designed and built microservices for the user subscription activation flow using Spring Boot, Spring WebFlux, Java 11, MongoDB, and Kong API Gateway. Built a shared security module (OpenID Connect + JWT) integrated across all production components. +Built custom guardrails and monitoring for the Mercedes-Benz automotive account using Node.js, Selenium, Lambda, Step Functions, and Grafana. Migrated Terragrunt to Terraform Enterprise. Configured GitLab CI/CD pipelines and automated scaling (EC2 ASG, ECS, RDS/Aurora). -**Credit Suisse** (2020–2021): Lead Full Stack Engineer on an investment wealth management platform. Contributed to TradeNet and RM Plus financial data feeds. Stack: Angular, Java, Spring Boot, Oracle RDBMS. +### Toyota Connected Europe +*2021* -**Metapack Group, Engineering Tech Lead** (2019): Architected microservices for a delivery management platform (e-commerce) using Spring Boot, AWS Lambda, and Node.js. Automated infrastructure with Terraform and owned CI/CD pipelines. +Designed and built microservices for the user subscription activation flow using Spring Boot, Spring WebFlux, Java 11, MongoDB, and Kong API Gateway. Built a shared security module (OpenID Connect + JWT) integrated across all production components. -**Smart Wealth AG, Lead Engineer** (2017-2019, FinTech): Led a team building a robo-advisory portfolio management platform in Zurich. Designed the architecture using DDD and Attribute-Driven Design, implemented with Java/Spring Boot and Angular, deployed on AWS with CI/CD via CloudBees and Docker. +### Credit Suisse +*Lead Full Stack Engineer · 2020-2021* -**Trading 212, Senior Engineer** (2009-2010): Migrated the trading engine's database model to a Domain-Driven Design architecture for the forex trading platform (trading212.com). SQL tuning, stored procedures, and ETL. +Contributed to TradeNet and RM Plus financial data feeds on an investment wealth management platform. Stack: Angular, Java, Spring Boot, Oracle RDBMS. + +### Y TREE +*FinTech · 2021-2022* + +Led implementation of a new ALM core module for financial life intelligence. Deployed microservices on AWS EKS with Kubernetes/Helm. Prototyped in Java/Kotlin (Spring Boot) and TypeScript (Express/Node.js). + +### Metapack Group +*Engineering Tech Lead · 2019* + +Architected microservices for a delivery management platform (e-commerce) using Spring Boot, AWS Lambda, and Node.js. Automated infrastructure with Terraform and owned CI/CD pipelines. + +## Also + +Smart Wealth AG: led a team building a robo-advisory portfolio management platform in Zurich, Java/Spring Boot and Angular on AWS (2017-2019). Trading 212: migrated the trading engine's database model to a Domain-Driven Design architecture for the forex trading platform (2009-2010). + + ## Tech Stack diff --git a/sources/catalin-waack.md b/sources/catalin-waack.md index 1e0bcf5..c5d3ffb 100644 --- a/sources/catalin-waack.md +++ b/sources/catalin-waack.md @@ -1,17 +1,22 @@ --- name: "Catalin Waack" -role: "AI Product Engineer & Consultant" -tagline: "From idea to paying customers, fast." +role: "AI Product Engineer, Former GovTech CTO" +tagline: "The model is rarely the bottleneck. Data, rules, permissions, integrations, failure modes and ownership are." location: "Germany (remote, EU and international)" linkedin: "https://www.linkedin.com/in/catalinwaack" github: "https://github.com/c4t4" website: "https://catalinwaack.com" email: "hello@catalinwaack.com" +proof: + - "7 of 10 DAX companies, German federal government" + - "15,000+ npm downloads" + - "12,000+ users, App Store Top 10 Music" + - "6 weeks: kickoff to live product" --- ## Summary -Catalin has worked with technology for 20 years, starting at 14 with web security and SQL injection, then formal IT training and computer science studies. Professional since 2015 across infrastructure, data, web and product engineering; independent since 2018. He designs and builds AI-enabled products, automations and internal tools end to end, from requirements and architecture through implementation, integrations and production operations. His own framing: "The model is rarely the bottleneck. Data, rules, permissions, integrations, failure modes and ownership are." Former CTO of a multi-award-winning GovTech platform used by the German Government and 7 of the top 10 DAX companies. +Catalin designs and builds AI-enabled products end to end: requirements, architecture, implementation, integrations, production operations. Former CTO of a multi-award-winning GovTech platform used by the German government and 7 of the top 10 DAX companies. Independent since 2018, professional since 2015 across infrastructure, data, web and product engineering. "In our network, he has an outstanding reputation. Personally, I can say that he is a one-man army. He's pragmatic, solves problems efficiently, and has the right experience." — Thomas Marbella, Founder & CEO, OneCode GmbH @@ -28,31 +33,39 @@ Catalin has worked with technology for 20 years, starting at 14 with web securit ## Notable Work -**ElectaCar, AI Product Consultant / Lead Product Engineer** (2026): Owned product and technical delivery for a Hong Kong EV comparison platform. From kickoff to a working build in 3 days, live product in 6 weeks. Turned fragmented vehicle data and manual publishing into structured search, comparison, calculation and localization workflows, plus government-price ingestion, AI-assisted research, insurance matching and a 12-stage publishing pipeline built on Temporal. +### ElectaCar via Navigator Insurance Brokers +*AI Product Consultant and Lead Full Stack Engineer · 2026* -**Heyamigo, Creator / AI Product Engineer** (2026): Open-source AI assistant running Claude, Codex or Grok through WhatsApp and Telegram, with durable queues, memory, browser delegation, reminders and voice workflows. Published on npm with 15,000+ downloads. +Owned product and technical delivery for a Hong Kong EV comparison platform covering 100+ vehicle models. From kickoff to a working build in 3 days, live product in 6 weeks. Python/FastAPI backend turns fragmented vehicle data and manual publishing into structured search, comparison, calculation and localization workflows, plus government-price ingestion and insurance matching through a 12-stage AI research and publishing pipeline built on Temporal. -**Google Ads Operations Platform** (2026): Multi-workspace advertising platform with controlled publishing and profitability tracking. +### HeyAmigo and AmigoEngine +*Creator, AI Product Engineer · 2026* -**VOXR GmbH, CTO** (2017–2020): Led product technology used by the German federal government and 7 of the top 10 DAX companies, handling 10,000+ live participants. Architected a fault-tolerant system for unreliable live-event connectivity. Progressed from business-development trainee to CTO, and helped pivot the product portfolio during the COVID-19 disruption. +Multi-provider agent runtime executing Claude Code, OpenAI Codex, Gemini CLI and Grok Build from WhatsApp and Telegram. Durable queues, stable task identity, idempotent side effects, worker heartbeats and restart recovery keep long AI jobs reliable. Published on npm with 15,000+ downloads. -**Syntax Institut, Lead Product Engineer** (2023–2024): Took a B2C eLearning platform from concept to paying customers in three months, supporting 3,000+ active students. Owned architecture, frontend, backend and the core commercial integrations: Next.js, TypeScript, Strapi, authentication, courses, video, quizzes, progress tracking, certificates, Stripe payments and subscriptions, Calendly. +### VOXR GmbH +*CTO, Employee with Revenue Share · 2017-2020* -**BREAKEATS LLC, Product Engineer - Contract** (2024–2026): R&D alongside a former NVIDIA manager and multiple-patent holder on novel audio-motion signal processing, with the objective of pursuing patent protection. Designed real-time synchronization and pattern recognition across iOS and server systems, combining FFT-based frequency analysis with accelerometer, gyroscope and headphone-motion data. Built the supporting infrastructure: Swift/CoreMotion capture, Python signal analysis, latency-aware matching, scoring algorithms, visual diagnostics, APIs and background processing. +Led product technology used by the German federal government and 7 of the top 10 DAX companies, handling 10,000+ live participants. Architected a fault-tolerant system for unreliable live-event connectivity. Progressed from business-development trainee to CTO, and helped pivot the product portfolio during the COVID-19 disruption. -**FAMFAM via DAYONE, Senior Frontend Developer - Contract** (2024): Built FAMFAM, a music-community and event app co-founded by the Keinemusik DJ collective, in a cross-functional team of more than ten. Implemented artist and music content, event and guest-list flows, reservations, invitations, profiles, push notifications and Stripe donations with React Native, Expo and TypeScript. Launch reached over 12,000 users and the App Store Top 10 in Music. +### FAMFAM via DAYONE +*Senior Frontend Developer, Contract · 2024* -**Verlag des Österreichischen Gewerkschaftsbundes, Frontend Developer - Contract** (2024): Migrated an extensive portfolio of websites to Adobe Experience Manager, working with design and engineering to implement new interfaces and reusable frontend patterns with React, Tailwind and BEM across a complex publishing environment. +Built FAMFAM, a music-community and event app co-founded by the Keinemusik DJ collective, in a cross-functional team of more than ten. Implemented artist and music content, event and guest-list flows, reservations, invitations, profiles, push notifications and Stripe donations with React Native, Expo and TypeScript. Launch reached over 12,000 users and the App Store Top 10 in Music. -**Tailorwine, Senior Full-stack Engineer and Product Manager - Contract** (2022): Built the B2B digital sommelier MVP that helped the company win REWE and EDEKA as customers. +### Syntax Institut +*Lead Product Engineer · 2023-2024* -**Rivoara + Runtime Affiliate** (2025–ongoing): Built Rivoara's multilingual Shopify Hydrogen storefront (TypeScript, React Router, Oxygen) for a European shower-filter brand, 4.9/5 stars from 112+ verified reviews, multi-stage filter hardware certified to NSF/ANSI Standard 42. Alongside it, built RuntimeAffiliate, a multi-tenant affiliate platform (Next.js, PostgreSQL, Drizzle) handling attribution, Shopify webhooks, commissions, analytics and payouts for other merchants. +Took a B2C eLearning platform from concept to paying customers in three months, supporting 3,000+ active students and 100+ instructors. Owned architecture, frontend, backend and the core commercial integrations: Next.js, TypeScript, Strapi, authentication, courses, video, quizzes (27,000+ quiz results), progress tracking, certificates, Stripe payments and subscriptions, Calendly. -**Luxury Essence / edeltravel Luxusreisen GmbH, Product Engineer** (2022–2023): Created a Tailwind-based design framework for non-technical teams in luxury travel, and built the travel publishing platform behind it, running 170+ articles. +### BreakEats LLC +*Product Engineer, Contract · 2024-2026* -**NoMoreApply, Co-Founder / Product and Infrastructure Engineer** (2024–ongoing): Built the public product and production infrastructure for this engineering community, including applications, peer review, invitations and lifecycle automation. +R&D alongside a former NVIDIA manager and multiple-patent holder on novel audio-motion signal processing, pursuing patent protection. Designed real-time synchronization and pattern recognition across nine frequency bands, combining FFT-based frequency analysis with accelerometer, gyroscope and headphone-motion data. Built the supporting infrastructure: Swift/CoreMotion capture with Accelerate/vDSP, LiveKit and WebRTC streaming, Python signal analysis, latency-aware matching, Swift Testing/XCTest coverage, and diagnostic timelines for visual debugging. -**Earlier roles** (2015–2017): Frontend delivery at msg DAVID, medical-data work and an award-winning dementia-support concept at the Peter L. Reichertz Institute, plus Linux and network administration at TU Braunschweig. +## Also + +Verlag des Österreichischen Gewerkschaftsbundes: migrated a large publishing portfolio to Adobe Experience Manager (2024). Tailorwine: B2B digital sommelier MVP that won REWE and EDEKA as customers (2022). Rivoara + Runtime Affiliate: multilingual Shopify Hydrogen storefront and a multi-tenant affiliate platform for other merchants (2025-ongoing). Luxury Essence / edeltravel: Tailwind design framework and travel publishing platform, 170+ articles (2022-2023). Google Ads Operations Platform: multi-workspace advertising platform with profitability tracking (2026). TailRemote: open-source SwiftUI client for macOS Screen Sharing over Tailscale (`github.com/C4T4/TailRemote`). NoMoreApply: co-founder, product and infrastructure engineer (2024-ongoing). Earlier roles (2015-2017): frontend delivery at msg DAVID, medical-data work at the Peter L. Reichertz Institute, Linux and network administration at TU Braunschweig. ## Tech Stack @@ -62,7 +75,9 @@ Catalin has worked with technology for 20 years, starting at 14 with web securit **Backend:** Node.js, FastAPI, Express, Strapi, Supabase, Laravel -**AI/Agents:** OpenAI, Anthropic, Grok, LangChain, LangGraph, Haystack, RAGFlow, custom MCP servers, GEO/LLMO (llms.txt), tool use, automation pipelines +**AI/Agents:** OpenAI, Anthropic, Grok, LangChain, LangGraph, Haystack, RAGFlow, custom MCP servers, GEO/LLMO (llms.txt), tool use, agent orchestration, prompt engineering, evaluation and human approval workflows, automation pipelines + +**Mobile/Apple:** Swift, SwiftUI, Swift Testing, XCTest, CoreMotion, Accelerate/vDSP, LiveKit, WebRTC, async/await, Task/TaskGroup, MainActor isolation, UIKit bridges, SPM **Cloud/Infra:** AWS (Lambda, ECS, RDS, ALB, CloudWatch, EventBridge, S3), Docker, Kubernetes, Vercel, Railway, Terraform, Temporal @@ -74,7 +89,7 @@ Catalin has worked with technology for 20 years, starting at 14 with web securit ## Background -Computer Science studies, Technische Universität Braunschweig, Germany (2014–2016). Technical college entrance qualification, IT (2014). Government-certified IT technician assistant (BSZ Stendal, 2011–2013). +Computer Science studies, Technische Universität Braunschweig, Germany (2014-2016). Technical college entrance qualification, IT (2014). Government-certified IT technician assistant (BSZ Stendal, 2011-2013). Earlier roles span medical informatics R&D (Peter L. Reichertz Institute, awarded a prize for a dementia-assistance concept), IT administration at TU Braunschweig, and Angular adoption at msg DAVID GmbH across 9,000+ employees. diff --git a/sources/cosmin-poieana.md b/sources/cosmin-poieana.md index 463f64c..0d83003 100644 --- a/sources/cosmin-poieana.md +++ b/sources/cosmin-poieana.md @@ -7,6 +7,11 @@ linkedin: "https://www.linkedin.com/in/cmin764" github: "https://github.com/cmin764" website: "https://wandercode.ltd" email: "cmin764@gmail.com" +proof: + - "Two startups acquired: Fashwell by Apple, Comfy by Siemens" + - "2B+ tokens/month across production agentic workflows" + - "5,000+ job channels, 10k-user open-source community" + - "13+ years Python, embedded fractional engineer" --- ## Summary @@ -27,17 +32,35 @@ AI handles the repetition. Humans fill the gaps that need judgment. Cosmin build ## Notable Work -**Traced AI** (2026, stealth): Building an AI audit trail for regulated industries (banking, healthcare, defense). The `traced-ai` library auto-patches LLM clients at import time: raw I/O goes to a local SQLite store that never leaves the client perimeter, while SHA-256 hashes and rationale strings are sent to an append-only chained ledger in the cloud. Rule registry maps EU AI Act, ISO 42001, and SOC 2 requirements to concrete logging obligations per decision type. Dashboard available as a self-hosted Docker image or hosted on Fly.io. +### Traced AI +*Stealth · 2026* -**Wandercode / VONQ** (2025-2026): Embedded engineer at a recruitment marketing platform serving 5,000+ job channels. Shipped four AI products in parallel: a Meeting Assistant (Recall.ai + Google Meet + ElevenLabs, live private hints for interviewers), Interview Retry (Retell, audio session recovery), a Knowledge Base with Careers Agent (Firecrawl + Pinecone + OpenAI embeddings, CV-to-job RAG matching), and a language assessment MVP for a major European client producing scored PDF dossiers (vocabulary, fluency, semantics, coherence). Drove AI adoption across the engineering team. +Building an AI audit trail for regulated industries (banking, healthcare, defense). The `traced-ai` library auto-patches LLM clients at import time: raw I/O goes to a local SQLite store that never leaves the client perimeter, while SHA-256 hashes and rationale strings are sent to an append-only chained ledger in the cloud. Rule registry maps EU AI Act, ISO 42001, and SOC 2 requirements to concrete logging obligations per decision type. -**Wandercode / A5 Labs** (2025): Built Python/FastAPI services and a C++ inference server delivering Game Theory Optimal (GTO) and reinforcement learning strategies for high-stakes poker. Three-service mesh with response-time-constrained routing; automated regression benchmark via Bitbucket CI. +### Wandercode via VONQ +*Embedded AI Engineer · 2025-2026* -**Sema4.ai** (2023-2024): Led a team of 5 engineers building AI Actions for OpenGPT-powered agents. Core product: an Action Server (FastAPI) that discovers and runs action packages in isolation. Pre-dates MCP standardization: type-safe Python functions annotated with `@action` or `@tool` and exposed via OpenAPI/MCP spec. Covered Google, Slack, HubSpot, and local document operations. Designed OAuth2 flows, drove DX improvements, managed hiring and 360 reviews. +Serving a recruitment marketing platform with 5,000+ job channels. Shipped four AI products in parallel: a Meeting Assistant (Recall.ai, Google Meet, ElevenLabs, live private hints for interviewers), Interview Retry (Retell, audio session recovery), a Knowledge Base with Careers Agent (Firecrawl, Pinecone, OpenAI embeddings, CV-to-job RAG matching), and a language assessment MVP for a major European client producing scored PDF dossiers. Now running ~2B tokens/month across these systems. -**Robocorp** (2021-2023, acquired by Sema4.ai): Built the Python RPA library ecosystem: intelligent document processing, browser automation (Selenium/Playwright), OCR, OAuth2, PDF handling. 10k-user community. Prioritized ruthlessly from direct customer support. +### Sema4.ai +*2023-2024* -**Comfy to Siemens** (2019-2020): Architected microservices for a smart buildings IoT platform (Go + Python/Django, gRPC/protobuf, PostGIS). Saw the full arc of a Siemens acquisition. +Led a team of 5 engineers building AI Actions for OpenGPT-powered agents. Core product: an Action Server (FastAPI) that discovers and runs action packages in isolation, predating MCP standardization: type-safe Python functions annotated with `@action` or `@tool` and exposed via OpenAPI/MCP spec. Covered Google, Slack, HubSpot, and local document operations. + +### Robocorp +*Acquired by Sema4.ai · 2021-2023* + +Built the Python RPA library ecosystem: intelligent document processing, browser automation (Selenium/Playwright), OCR, OAuth2, PDF handling. Grew a 10k-user open-source community, prioritizing ruthlessly from direct customer support. + +### Comfy +*Acquired by Siemens · 2019-2020* + +Architected microservices for a smart buildings IoT platform (Go + Python/Django, gRPC/protobuf, PostGIS). Saw the full arc of the acquisition. + +### Wandercode via A5 Labs +*2025* + +Built Python/FastAPI services and a C++ inference server delivering Game Theory Optimal (GTO) and reinforcement learning strategies for high-stakes poker. Three-service mesh with response-time-constrained routing, automated regression benchmark via Bitbucket CI. ## Tech Stack @@ -64,5 +87,3 @@ Co-founded RoPython (PSF-approved), organizing regional conferences and workshop Distinctions: Robocorp Level I/II/III certifications; 2nd place Innovation Labs Iași (2019); Bronze Medal, National Olympiad in Informatics (2012); Stanford AI course (2011). Writing at cmin764.medium.com and cosminslife.wordpress.com. Photography at asitisphotos (Instagram). Digital nomad since 2021, 50+ countries. - -Scale proof: ~2B tokens/month, ~12,750 AI messages/month across systematic agentic workflows. diff --git a/templates/nomoreapply.typ b/templates/nomoreapply.typ index 31f19ba..42c2138 100644 --- a/templates/nomoreapply.typ +++ b/templates/nomoreapply.typ @@ -1,45 +1,70 @@ // nomoreapply.typ: Pandoc/Typst template for NoMoreApply brochures // Modes: individual (full profile) | team (member cards) // Controlled by Pandoc boolean variables: individual:true | team:true +// +// Token table is documented in CLAUDE.md; keep both in sync. -#let bg = rgb("#FAFAFA") // off-white page background -#let nearblack = rgb("#09090B") // primary text -#let red = rgb("#e8002d") // NMA brand red -#let midgrey = rgb("#71717A") // secondary / muted text -#let lightgrey = rgb("#E4E4E7") // dividers and card borders +#let bg = rgb("#FAFAFA") // off-white page background +#let nearblack = rgb("#09090B") // primary text / dark band background +#let red = rgb("#DC143C") // NMA brand red (matches live nomoreapply.com) +#let midgrey = rgb("#71717A") // secondary / muted text +#let darkgrey = rgb("#52525B") // text secondary (denser than midgrey) +#let faintgrey = rgb("#A1A1AA") // eyebrow / faint text on dark bands +#let lightgrey = rgb("#E4E4E7") // dividers and card borders +#let offwhite = rgb("#FAFAFA") // text on dark bands + +#let doc_name = "$name$$if(team_name)$$team_name$$endif$" +#let doc_role = "$if(role)$$role$$endif$$if(team_tagline)$$team_tagline$$endif$" #set page( paper: "a4", margin: (left: 22mm, right: 22mm, top: 18mm, bottom: 22mm), fill: bg, + header: context { + if counter(page).get().first() > 1 { + grid( + columns: (1fr, auto), + text(size: 8pt, fill: midgrey, weight: "semibold")[#doc_name], + text(size: 8pt, fill: midgrey)[ + #counter(page).display("1 / 1", both: true) + ] + ) + v(0.2em) + line(length: 100%, stroke: 0.4pt + lightgrey) + } + }, footer: align(center)[ #text(size: 7.5pt, fill: midgrey)[NoMoreApply | nomoreapply.com] ] ) #set text(font: "Inter", size: 10pt, fill: nearblack) -#set par(leading: 0.75em, spacing: 0.5em) +#set par(leading: 0.75em, spacing: 0.75em) -// Section heading: small, bold, uppercase, subtle grey rule +// Section heading: accent bar above, small bold uppercase eyebrow label #show heading.where(level: 2): it => { - v(0.7em) - text(size: 7.5pt, fill: nearblack, weight: "bold", tracking: 0.1em)[ + v(0.9em, weak: true) + rect(width: 14pt, height: 2pt, fill: red) + v(0.2em) + text(size: 7.5pt, fill: faintgrey, weight: "bold", tracking: 0.12em)[ #upper(it.body) ] - v(0.15em) - line(length: 100%, stroke: 0.5pt + lightgrey) - v(0.25em) + v(0.3em) } +// Work-entry heading: bold company/project name #show heading.where(level: 3): it => { - v(0.35em) - text(size: 10pt, weight: "semibold")[#it.body] - v(0.1em) + v(0.4em) + text(size: 10.5pt, weight: "bold")[#it.body] + v(0.05em) } -#set list(indent: 1em, spacing: 0.2em) -// Prevent par spacing from creating extra gaps inside wrapped list items -#show list: set par(leading: 0.65em, spacing: 0em) +// Meta line under a level-3 heading, written as *italic* in source markdown +#show emph: set text(fill: darkgrey, size: 9pt, style: "normal") + +// Coherent list spacing: one rule, no contradiction between par and list settings +#set list(indent: 1em, spacing: 0.4em) +#show list: set par(leading: 0.65em, spacing: 0.4em) // Member card: subtle left border (team mode) #let accentcard(body) = block( @@ -50,6 +75,22 @@ body ) +// Proof band: a row of stat cells with a muted rule above and below +#let proofband(items) = block(width: 100%, above: 0.6em, below: 0.6em)[ + #line(length: 100%, stroke: 0.5pt + lightgrey) + #v(0.5em) + #grid( + columns: (1fr,) * items.len(), + column-gutter: 10pt, + ..items.map(it => text(size: 8.5pt, fill: darkgrey, weight: "medium")[#it]) + ) + #v(0.5em) + #line(length: 100%, stroke: 0.5pt + lightgrey) +] + +// Wrap a Notable Work entry so its heading cannot strand at a page bottom +#let workentry(body) = block(width: 100%, breakable: false, below: 0.5em, body) + $if(individual)$ // INDIVIDUAL PROFILE @@ -67,9 +108,16 @@ $if(individual)$ $if(github)$ · #link("$github$")[GitHub]$endif$ $if(website)$ · #link("$website$")[$website$]$endif$ ] + +$if(proof)$ +#proofband(( + $for(proof)$"$proof$",$endfor$ +)) +$else$ #v(0.3em) #line(length: 100%, stroke: 0.5pt + lightgrey) #v(0.4em) +$endif$ $body$ @@ -91,11 +139,9 @@ $if(team)$ $body$ -#v(0.8em) -#align(center)[ - #line(length: 40%, stroke: 0.4pt + lightgrey) - #v(0.2em) - #text(size: 9pt, weight: "semibold", fill: nearblack)[$cta$] +#v(0.6em) +#block(width: 100%, fill: nearblack, inset: (x: 18pt, y: 14pt), radius: 3pt)[ + #align(center)[#text(size: 10pt, weight: "semibold", fill: offwhite)[$cta$]] ] $endif$ From 7edf5de3b45eec76719eca4838a401e5d351d578 Mon Sep 17 00:00:00 2001 From: Cosmin Poieana Date: Fri, 4 Sep 2026 22:41:43 +0300 Subject: [PATCH 2/3] Fix template injection bug, heading orphans, and duplicate agent files Pandoc renders substituted metadata as content, not a string. The template interpolated name/role/proof inside Typst string literals, which broke the build on a quote or @mention in proof: and silently mangled ~ and *emphasis*. Fixed at the interpolation sites. The level-2/3 heading show rules discarded Typst's default heading stickiness instead of adding it, so headings orphaned more than before despite the PR claiming this was fixed. Wrapped both in block(sticky: true) and removed the unused workentry() helper that was meant to do this but was never called. Team member cards now carry breakable: false so they don't split across a page boundary. Extended assemble-team.sh's escaping to include [ ] < >, since ] is what actually closes the Typst content block injected text lands in. Makefile now rebuilds the team PDF when the script itself changes. AGENTS.md and .agents/ were frozen copies of this repo's pre-PR state from an earlier migration, invisible to review and set to silently revert this work on the next sync. Replaced with a tracked AGENTS.md symlink to CLAUDE.md and deleted .agents/. Reordered Notable Work chronologically in all three profiles, corrected via/for direction to lead with the recognisable brand, trimmed Cosmin's Summary to the word cap the schema introduces, and replaced Angel's unverified '15+ years' proof claim with one his listed roles actually support. Amended the unmerged positioning-overhaul commit's audit trail entry to stop claiming fixes that weren't actually in the code, and added a new entry for this pass. --- .claude/commands/sync-sources.md | 2 +- AGENTS.md | 1 + CLAUDE.md | 8 ++-- Makefile | 2 +- docs/audit-trail.md | 12 +++++- docs/blueprints/about-page.md | 2 +- docs/blueprints/initial-structure.md | 10 ++--- scripts/assemble-team.sh | 9 +++-- site/about/index.html | 2 +- sources/angel-aytov.md | 16 ++++---- sources/catalin-waack.md | 14 +++---- sources/cosmin-poieana.md | 18 +++++---- templates/nomoreapply.typ | 55 +++++++++++++++------------- 13 files changed, 86 insertions(+), 65 deletions(-) create mode 120000 AGENTS.md diff --git a/.claude/commands/sync-sources.md b/.claude/commands/sync-sources.md index 7673776..244884d 100644 --- a/.claude/commands/sync-sources.md +++ b/.claude/commands/sync-sources.md @@ -25,7 +25,7 @@ For each person with new resources, follow CLAUDE.md procedure 2 (Syncing resour - Read **all** resource files for that person in `resources/` (not just the newest) - Synthesize into their `sources/*.md` file: brochure-style, not a CV dump -- The sharpest version of each section: Summary (2-3 sentences, lead with outcome and strongest claim, first paragraph self-contained since the team brochure extracts it verbatim), Expertise (5-8 bullets, technically specific, no manual line breaks), Notable Work (**capped at 6**, ranked by named brand → hard number → recency → positioning fit → technical distinctiveness; demote the rest to `## Also` as one-liners), Tech Stack (categorized), Background (education, distinctions, community) +- The sharpest version of each section: Summary (2-3 sentences, lead with outcome and strongest claim, first paragraph self-contained and under ~50 words since the team brochure extracts it verbatim), Expertise (5-8 bullets, technically specific, no manual line breaks), Notable Work (**capped at 6**; rank candidates by named brand → hard number → recency → positioning fit → technical distinctiveness to decide which 6 survive, demote the rest to `## Also` as one-liners, then order the surviving 6 chronologically by end date descending; brand-first naming, e.g. `VONQ via Wandercode`, `ElectaCar for Navigator Insurance Brokers`), Tech Stack (categorized), Background (education, distinctions, community) - Update `proof:` front matter (3-4 metric-led fragments) if a new resource surfaces a stronger number or brand - Remove `` comments for any gaps that are now filled - Keep remaining TODOs for still-missing data diff --git a/AGENTS.md b/AGENTS.md new file mode 120000 index 0000000..681311e --- /dev/null +++ b/AGENTS.md @@ -0,0 +1 @@ +CLAUDE.md \ No newline at end of file diff --git a/CLAUDE.md b/CLAUDE.md index be8c94f..991eb68 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -1,5 +1,7 @@ # CLAUDE.md: NoMoreApply/services +This file and `.claude/commands/` are the single source of truth for agent instructions in this repo. `AGENTS.md` is a symlink to this file, kept for tools that look for that name specifically. Never fork it into a real copy: a duplicate freezes at whatever it was at migration time and silently drifts out of sync with every change made here. If a tool ever writes a standalone `AGENTS.md` or an `.agents/` directory, that is a bug in the migration, not a second source of truth: delete it and re-symlink. + ## Project PDF brochure pipeline for the NoMoreApply engineering collective. Converts per-person Markdown profiles into polished PDFs (one team brochure + individual pages) via Pandoc + Typst, built automatically in CI and published to GitHub Pages. @@ -15,7 +17,7 @@ PDF brochure pipeline for the NoMoreApply engineering collective. Converts per-p - Text primary: `#09090B` (near-black, also the dark-band fill) - Text secondary: `#52525B` - Text tertiary / eyebrow: `#71717A` (muted grey), faint variant `#A1A1AA` -- Accent: `#DC143C` (NMA brand red, confirmed against the live nomoreapply.com — role lines, team taglines, accent bars only) +- Accent: `#DC143C` (NMA brand red, confirmed against the live nomoreapply.com: role lines, team taglines, accent bars only) - Dividers: `#E4E4E7` (light grey rules and card borders) - Font: Inter, weights 400/600/700 - Name: 26pt bold, tracking -0.02em @@ -47,12 +49,12 @@ All prose in `sources/` must follow these rules. Apply them when extracting or e Each `sources/*.md` file must follow the same YAML front matter + H2 section structure so the template can consume them consistently. -**Front matter** additionally carries `proof:`, a list of 3-4 metric-led fragments (e.g. `"7 of 10 DAX companies"`). This renders as the stat band under the contact line. Avoid `~` in these fragments (Pandoc's Typst writer escapes it when substituting raw template variables, unlike body prose) — write `2B+` rather than `~2B`. +**Front matter** additionally carries `proof:`, a list of 3-4 metric-led fragments (e.g. `"7 of 10 DAX companies"`). This renders as the stat band under the contact line. Avoid `@word` in these fragments and in body prose generally: Pandoc parses it as a citation (`#cite(, ...)`), which fails the build with "the document does not contain a bibliography" since there is no bibliography configured. **Body sections, in order:** 1. `## Summary` - 2-3 sentences. Lead with the outcome and the strongest claim, not biography. The team brochure (`scripts/assemble-team.sh`) extracts only the **first paragraph** (up to the first blank line) for the team card, so keep that opening paragraph self-contained and under ~50 words. 2. `## Expertise` - 5-8 bullets. The team brochure also extracts the **first 4 bullets** here, so lead with the strongest ones. -3. `## Notable Work` - **capped at 6 entries.** Write each as an H3 heading (company/project) followed by an italic meta line (`*Role · Years*`), then prose or bullets. Adding a 7th entry means demoting one to `## Also`. Ranking rubric, applied in order: named client or brand a buyer recognises → a hard number → recency → fit with current positioning → technical distinctiveness (ties break toward recency). Every full entry needs at least one number; no metric means it belongs in `## Also`. +3. `## Notable Work` - **capped at 6 entries.** Write each as an H3 heading (company/project) followed by an italic meta line (`*Role · Years*`), then prose or bullets. Italics are reserved for this meta line only (the template renders all `*emphasis*` at 9pt muted grey document-wide, so inline emphasis in prose reads as a rendering glitch, not a style choice). Adding a 7th entry means demoting one to `## Also`. Ranking rubric decides which entries make the cut, applied in order: named client or brand a buyer recognises → a hard number → recency → fit with current positioning → technical distinctiveness (ties break toward recency). Every full entry needs at least one number; no metric means it belongs in `## Also`. **Order the entries chronologically** (by end date descending, then start date descending) rather than by rubric strength, so the section reads as a timeline. For an entry titled by the company you delivered through, put the recognisable brand first: `VONQ via Wandercode`, not `Wandercode via VONQ`. For an entry titled by a product you built for a client, use `for`: `ElectaCar for Navigator Insurance Brokers`. 4. `## Also` - one-liners for demoted or minor work. Keep brand names visible, cut the detail. 5. `## Tech Stack` - Categorized list: languages, frameworks, infra, AI/ML tools. 6. `## Background` - Education, distinctions, speaking, community. diff --git a/Makefile b/Makefile index 8096d33..8510aa4 100644 --- a/Makefile +++ b/Makefile @@ -36,7 +36,7 @@ $(TEAM_PDF): $(TEAM_MD) $(TEMPLATE) | $(OUTDIR) --variable=team:true \ -o $@ $< -$(TEAM_MD): $(SOURCES)/team.md $(addprefix $(SOURCES)/,$(addsuffix .md,$(MEMBERS))) | $(OUTDIR) +$(TEAM_MD): $(SOURCES)/team.md $(addprefix $(SOURCES)/,$(addsuffix .md,$(MEMBERS))) scripts/assemble-team.sh | $(OUTDIR) bash scripts/assemble-team.sh $@ $(SOURCES)/team.md $(addprefix $(SOURCES)/,$(addsuffix .md,$(MEMBERS))) $(OUTDIR): diff --git a/docs/audit-trail.md b/docs/audit-trail.md index 445a355..a92bca2 100644 --- a/docs/audit-trail.md +++ b/docs/audit-trail.md @@ -2,9 +2,17 @@ --- +**2026-09-04** - Code review fixes: heading orphans, metadata-injection bug, agent-file duplication + +Decision: Fixed a Typst template bug where `#name$`, `$role$`, and `$proof$` were interpolated inside `"..."` string literals. Pandoc renders substituted metadata as content, not a string, so a `proof:` item containing a quote or `@mention` broke the build with a syntax error, and one containing `~` or `*emphasis*` printed escaped Typst source into the PDF. Fixed at the interpolation site by switching to `[...]` content blocks; verified with a synthetic `proof:` value containing all four characters. Separately fixed the level-2/3 heading show rules, which returned loose `text()` + `v()` and had discarded Typst's default heading-to-body stickiness, the opposite of the intended fix: reproduced two profiles ending a page on a bare heading. Wrapped both in `block(sticky: true)` and deleted the unused `workentry()` helper that was meant to do this but was never called. Added `breakable: false` to team member cards, which were splitting across the page break. Extended `scripts/assemble-team.sh`'s escaping to `[ ] < >`, since `]` closes the Typst content block the injected text lands inside and was not covered. Replaced the untracked `AGENTS.md` and `.agents/skills/source-command-sync-sources/SKILL.md`, both frozen copies of this repo's pre-PR state from an earlier migration (same-second timestamps), with a tracked `AGENTS.md` symlink to `CLAUDE.md` and deletion of `.agents/`, so there is one source of truth instead of a copy that silently reverts on the next sync. Reordered `## Notable Work` chronologically (end date descending) in all three profiles per the schema, corrected `via` direction to lead with the recognisable brand (`VONQ via Wandercode`, `Mercedes-Benz via DEMICON`), and introduced `for` for a product built for a named client (`ElectaCar for Navigator Insurance Brokers`). Trimmed Cosmin's Summary opening paragraph to the ~50-word cap the schema introduced but the file itself violated. Replaced Angel's proof-band claim of "15+ years" with a dated-range fragment, since the same diff that added it also flagged the years figure as unverified in a ``. + +Rationale: A full review of the branch caught that two of the PR's headline claims (heading orphan protection, unescaped-injection safety) were not actually true of the shipped code, which the pre-existing audit entry above has now been corrected to reflect rather than left standing. + +--- + **2026-09-04** - Positioning overhaul: brand red correction, distillation cap, template rebuild -Decision: Corrected the brand accent from `#e8002d` back to `#DC143C` after confirming against the live nomoreapply.com (`about-*.js` and its CSS carry 13+ occurrences of `#DC143C`, zero `#e8002d`) and the `nma` repo source (19 occurrences). The 2026-04-09 "correction" to `#e8002d` was itself wrong. Added a `proof:` front-matter field (3-4 metric fragments rendered as a stat band) and a `## Also` section to the source schema, with `## Notable Work` capped at 6 entries and a ranking rubric (named brand → hard number → recency → positioning fit → technical distinctiveness). Rebuilt `templates/nomoreapply.typ`: running header on pages 2+, accent bars above section headings, two-tone H3 + italic-meta work entries, a proof band under the contact line, `breakable: false` on work entries so headings can't strand at page bottoms, coherent bullet spacing (the old `#set list` / `#show list: set par` pair contradicted each other), and one dark CTA band on the team brochure. Fixed two bugs in `scripts/assemble-team.sh`: the team-card summary window took the first 4 non-empty lines (pulling in a full paragraph plus testimonial) instead of the first paragraph, and member text was injected into Typst content unescaped. Bumped CI's pinned Pandoc/Typst (3.9.0.2/0.14.2 to 3.11/0.15.1) to match local dev, closing a toolchain gap that could pass locally and fail in CI. Added a `target:` metadata field for role-targeted resources (a CV written for a specific role describes the same work through a different lens; it should be mined for facts, not read as a repositioning signal). +Decision: Corrected the brand accent from `#e8002d` back to `#DC143C` after confirming against the live nomoreapply.com (`about-*.js` and its CSS carry 13+ occurrences of `#DC143C`, zero `#e8002d`) and the `nma` repo source (19 occurrences). The 2026-04-09 "correction" to `#e8002d` was itself wrong. Added a `proof:` front-matter field (3-4 metric fragments rendered as a stat band) and a `## Also` section to the source schema, with `## Notable Work` capped at 6 entries and a ranking rubric (named brand → hard number → recency → positioning fit → technical distinctiveness). Rebuilt `templates/nomoreapply.typ`: running header on pages 2+, accent bars above section headings, two-tone H3 + italic-meta work entries, a proof band under the contact line, `block(sticky: true)` on section and work-entry headings so they can't strand at page bottoms, coherent bullet spacing (the old `#set list` / `#show list: set par` pair contradicted each other), and one dark CTA band on the team brochure. Fixed two bugs in `scripts/assemble-team.sh`: the team-card summary window took the first 4 non-empty lines (pulling in a full paragraph plus testimonial) instead of the first paragraph, and member text was injected into Typst content unescaped for `# $ @ \ [ ] < >`. Bumped CI's pinned Pandoc/Typst (3.9.0.2/0.14.2 to 3.11/0.15.1) to match local dev, closing a toolchain gap that could pass locally and fail in CI. Added a `target:` metadata field for role-targeted resources (a CV written for a specific role describes the same work through a different lens; it should be mined for facts, not read as a repositioning signal). Rationale: Catalin's feedback ("layout looks broken and I think the positioning is too weak") traced to one root cause across all three profiles: the sync process accumulates Notable Work entries and never evicts (his had grown to 14, Angel's to 9), so proof gets buried in prose instead of leading the page. The template was still its original minimum-viable draft and implemented none of `nma/references/design.md`'s "proof over promises" or "no walls of text" principles. Considered switching to LaTeX per Catalin's suggestion; rejected, since the 2026-04-06 switch to Typst was for build speed (XeLaTeX took 3-5 minutes vs Typst's seconds) and every device his LaTeX CV uses (header, accent rule, two-tone entries) is a few lines of Typst once actually written. @@ -12,7 +20,7 @@ Rationale: Catalin's feedback ("layout looks broken and I think the positioning **2026-09-04** - Updated all three profiles: capped Notable Work, added proof bands, mined Catalin's iOS CV -What changed: Catalin's `## Notable Work` cut from 14 to 6 full entries (ElectaCar/Navigator Insurance Brokers, HeyAmigo+AmigoEngine, VOXR, FAMFAM via DAYONE, Syntax, BreakEats), remainder moved to `## Also`. Role and Summary rewritten to lead with his "the model is rarely the bottleneck" positioning and DAX/government proof instead of a "started at 14" biography opening. Mined his new iOS-targeted CV for facts absent from the AI-consultant CV: ElectaCar's client is Navigator Insurance Brokers, 100+ vehicle models, Syntax's 100+ instructors and 27,000+ quiz results, AmigoEngine pairing, BreakEats' nine frequency bands and Swift/LiveKit/WebRTC detail, the new open-source TailRemote project, VoxR as revenue-share employment. Angel's Notable Work cut from 9 to 6 (kept AI Expert, DEMICON/Mercedes-Benz, Toyota Connected, Credit Suisse, Y TREE, Metapack; demoted Smart Wealth AG and Trading 212), and the unexplained 2009-2017 timeline gap against his "over 15 years" claim is now flagged with a `` instead of left silent. Cosmin's file was already at the 6-entry cap; no cuts, but promoted previously-buried proof (two acquisitions, 5,000+ job channels, 10k-user community, 2B+ tokens/month) into the new `proof:` field and reordered Notable Work by strength. +What changed: Catalin's `## Notable Work` cut from 14 to 6 full entries (ElectaCar/Navigator Insurance Brokers, HeyAmigo+AmigoEngine, VOXR, FAMFAM via DAYONE, Syntax, BreakEats), remainder moved to `## Also`. Role and Summary rewritten to lead with his "the model is rarely the bottleneck" positioning and DAX/government proof instead of a "started at 14" biography opening. Mined his new iOS-targeted CV for facts absent from the AI-consultant CV: ElectaCar's client is Navigator Insurance Brokers, 100+ vehicle models, Syntax's 100+ instructors and 27,000+ quiz results, AmigoEngine pairing, BreakEats' nine frequency bands and Swift/LiveKit/WebRTC detail, the new open-source TailRemote project, VoxR as revenue-share employment. Angel's Notable Work cut from 9 to 6 (kept AI Expert, DEMICON/Mercedes-Benz, Toyota Connected, Credit Suisse, Y TREE, Metapack; demoted Smart Wealth AG and Trading 212), and the unexplained 2009-2017 timeline gap against his "over 15 years" claim is now flagged with a `` instead of left silent. Cosmin's file was already at the 6-entry cap; no cuts, but promoted previously-buried proof (two acquisitions, 5,000+ job channels, 10k-user community, ~2B tokens/month) into the new `proof:` field. Why: New resource added (`resources/Catalin_Waack-cv-ios-04_09_2026.pdf`, an iOS-role-targeted CV Catalin sent alongside his layout feedback). Cross-referencing it against the existing AI-consultant CV surfaced facts neither prior sync had captured. The cap and rubric come from the same-day schema change (see pipeline decision above) and were applied to all three profiles in one pass since the accumulation problem was universal, not Catalin-specific. diff --git a/docs/blueprints/about-page.md b/docs/blueprints/about-page.md index f91ba6a..a167755 100644 --- a/docs/blueprints/about-page.md +++ b/docs/blueprints/about-page.md @@ -50,7 +50,7 @@ Match nomoreapply.com exactly: - Background: `#f5f5f3` (light cream) - White sections: `#ffffff` - Near-black text: `#111111` -- Accent: `#e8002d` (red — used sparingly: hero accents, value highlights, CTAs) +- Accent: `#DC143C` (red, used sparingly: hero accents, value highlights, CTAs) - Muted text: `#777777` - Borders: `#e2e2de` - Font: Inter (weights 400–900) + JetBrains Mono for labels and metadata diff --git a/docs/blueprints/initial-structure.md b/docs/blueprints/initial-structure.md index b8dad35..b14dc0e 100644 --- a/docs/blueprints/initial-structure.md +++ b/docs/blueprints/initial-structure.md @@ -36,7 +36,7 @@ nomoreapply.github.io/services/ (public, always reflects latest push) ### How the team brochure summary works -`scripts/assemble-team.sh` extracts the first paragraph (up to the first blank line) of `## Summary` and the first 4 bullets of `## Expertise` from each individual `.md` file, wraps them in Typst `#accentcard()` blocks, and injects them into the assembled team markdown before Pandoc + Typst renders the team PDF. Full profiles stay in their individual PDFs. Every value it injects is escaped for Typst special characters (`#`, `$`, `@`, `\`) before insertion, so raw member prose can never break the build. +`scripts/assemble-team.sh` extracts the first paragraph (up to the first blank line) of `## Summary` and the first 4 bullets of `## Expertise` from each individual `.md` file, wraps them in Typst `#accentcard()` blocks, and injects them into the assembled team markdown before Pandoc + Typst renders the team PDF. Full profiles stay in their individual PDFs. Every value it injects is escaped for Typst special characters (`#`, `$`, `@`, `\`, `[`, `]`, `<`, `>`) before insertion, so raw member prose can never break the build. --- @@ -67,7 +67,7 @@ proof: **Body sections (in this order, H2 headings):** 1. `## Summary` - 2-3 sentence pitch. Lead with the outcome and the strongest claim, not the role or biography. The team brochure extracts only the first paragraph verbatim, so keep it self-contained. 2. `## Expertise` - 5-8 bullet points. Core capabilities, technically specific. No manual line breaks inside bullets. The team brochure extracts the first 4. -3. `## Notable Work` - **capped at 6 entries**, each an H3 heading + italic meta line (`*Role · Years*`) + prose/bullets. Ranked: named brand → hard number → recency → positioning fit → technical distinctiveness. Every entry needs at least one number. +3. `## Notable Work` - **capped at 6 entries**, each an H3 heading + italic meta line (`*Role · Years*`) + prose/bullets. Which 6 survive is ranked: named brand → hard number → recency → positioning fit → technical distinctiveness. The survivors are then ordered chronologically (end date descending). Every entry needs at least one number. 4. `## Also` - one-liners for work demoted from Notable Work, or minor engagements. Keep the brand name, cut the detail. 5. `## Tech Stack` - Categorized list: languages, frameworks, infra, AI/ML tools. 6. `## Background` - Education, distinctions, speaking, community. @@ -188,8 +188,8 @@ Tool versions pinned (matches local dev toolchain): - Typst: 0.15.1 - actions/checkout: v6.0.2 - actions/cache: v5.0.4 -- actions/upload-pages-artifact: v4.0.0 -- actions/deploy-pages: v5.0.0 +- actions/upload-pages-artifact: v5 +- actions/deploy-pages: v5 Site index (`site/index.html`) is copied into `_site/` alongside the PDFs on every build. @@ -243,5 +243,5 @@ Triggered after new resources are added. Identifies which people have updates si - [x] Verify Pages deployment URL works (`nomoreapply.github.io/services/`) - [x] Redesign site/index.html (team brochure hero, named profile links, footer) - [x] Remove unused font files (kept 4, removed 16) -- [x] Correct brand red to `#e8002d` +- [x] Correct brand red to `#DC143C` - [x] Fix bullet list spacing in template diff --git a/scripts/assemble-team.sh b/scripts/assemble-team.sh index 2eceaca..dc63b09 100755 --- a/scripts/assemble-team.sh +++ b/scripts/assemble-team.sh @@ -13,10 +13,13 @@ strip_emdash() { echo "$1" | sed 's/ — / - /g; s/—/-/g' } -# Escape characters that are meaningful inside a Typst content block (#, $, @, \) -# so raw member prose can never break the build. +# Escape characters that are meaningful inside a Typst content block +# (#, $, @, \, and the [ ] < > that delimit content blocks and labels) +# so raw member prose can never break the build. Injected values land inside +# #accentcard([...]) and #text(...)[...] - an unescaped ] closes that block +# early and desyncs everything after it. typst_escape() { - echo "$1" | sed 's/\\/\\\\/g; s/#/\\#/g; s/\$/\\$/g; s/@/\\@/g' + echo "$1" | sed 's/\\/\\\\/g; s/#/\\#/g; s/\$/\\$/g; s/@/\\@/g; s/\[/\\[/g; s/\]/\\]/g; s//\\>/g' } # Front matter: lines between first and second --- (exclusive of both) diff --git a/site/about/index.html b/site/about/index.html index b8e944c..f82eaa0 100644 --- a/site/about/index.html +++ b/site/about/index.html @@ -19,7 +19,7 @@ text-align: center; padding: 2rem; } - a { color: #e8002d; } + a { color: #DC143C; } diff --git a/sources/angel-aytov.md b/sources/angel-aytov.md index 972ef81..f89645e 100644 --- a/sources/angel-aytov.md +++ b/sources/angel-aytov.md @@ -10,12 +10,12 @@ email: "angel@aytov.com" proof: - "Mercedes-Benz, Toyota, Credit Suisse" - "HIPAA, GDPR, ISO/IEC 42001-compliant AI systems" - - "15+ years, FinTech to HealthTech to Automotive" + - "FinTech, HealthTech, Automotive: Dublin, remote EU" --- ## Summary -Angel builds AI and data infrastructure that goes beyond prototypes into regulated, observable production systems. Over 15 years across FinTech, HealthTech, and Automotive (Mercedes-Benz, Toyota, Credit Suisse, Metapack), with a current focus on agentic AI: GraphRAG pipelines, multi-agent reasoning, real-time voice interfaces, and the observability layer that makes them auditable. Based in Dublin, open to remote or hybrid engagements across Europe. +Angel builds AI and data infrastructure that goes beyond prototypes into regulated, observable production systems. Across FinTech, HealthTech, and Automotive (Mercedes-Benz, Toyota, Credit Suisse, Metapack), with a current focus on agentic AI: GraphRAG pipelines, multi-agent reasoning, real-time voice interfaces, and the observability layer that makes them auditable. Based in Dublin, open to remote or hybrid engagements across Europe. ## Expertise @@ -34,11 +34,16 @@ Angel builds AI and data infrastructure that goes beyond prototypes into regulat Building clinical research and patient decision support workflows. Delivered a GraphRAG platform with hybrid retrieval and RAGAS evaluation, autonomous research agents for medical literature and clinical trial discovery, a real-time FastAPI gateway with WebRTC voice pipeline, and a full observability stack (OTEL, Langfuse) with PII redaction and sandbox validation before production exposure. -### DEMICON via Mercedes-Benz +### Mercedes-Benz via DEMICON *Senior AWS Cloud Engineer · 2022-2024* Built custom guardrails and monitoring for the Mercedes-Benz automotive account using Node.js, Selenium, Lambda, Step Functions, and Grafana. Migrated Terragrunt to Terraform Enterprise. Configured GitLab CI/CD pipelines and automated scaling (EC2 ASG, ECS, RDS/Aurora). +### Y TREE +*FinTech · 2021-2022* + +Led implementation of a new ALM core module for financial life intelligence. Deployed microservices on AWS EKS with Kubernetes/Helm. Prototyped in Java/Kotlin (Spring Boot) and TypeScript (Express/Node.js). + ### Toyota Connected Europe *2021* @@ -49,11 +54,6 @@ Designed and built microservices for the user subscription activation flow using Contributed to TradeNet and RM Plus financial data feeds on an investment wealth management platform. Stack: Angular, Java, Spring Boot, Oracle RDBMS. -### Y TREE -*FinTech · 2021-2022* - -Led implementation of a new ALM core module for financial life intelligence. Deployed microservices on AWS EKS with Kubernetes/Helm. Prototyped in Java/Kotlin (Spring Boot) and TypeScript (Express/Node.js). - ### Metapack Group *Engineering Tech Lead · 2019* diff --git a/sources/catalin-waack.md b/sources/catalin-waack.md index c5d3ffb..bfb570f 100644 --- a/sources/catalin-waack.md +++ b/sources/catalin-waack.md @@ -33,7 +33,7 @@ Catalin designs and builds AI-enabled products end to end: requirements, archite ## Notable Work -### ElectaCar via Navigator Insurance Brokers +### ElectaCar for Navigator Insurance Brokers *AI Product Consultant and Lead Full Stack Engineer · 2026* Owned product and technical delivery for a Hong Kong EV comparison platform covering 100+ vehicle models. From kickoff to a working build in 3 days, live product in 6 weeks. Python/FastAPI backend turns fragmented vehicle data and manual publishing into structured search, comparison, calculation and localization workflows, plus government-price ingestion and insurance matching through a 12-stage AI research and publishing pipeline built on Temporal. @@ -43,10 +43,10 @@ Owned product and technical delivery for a Hong Kong EV comparison platform cove Multi-provider agent runtime executing Claude Code, OpenAI Codex, Gemini CLI and Grok Build from WhatsApp and Telegram. Durable queues, stable task identity, idempotent side effects, worker heartbeats and restart recovery keep long AI jobs reliable. Published on npm with 15,000+ downloads. -### VOXR GmbH -*CTO, Employee with Revenue Share · 2017-2020* +### BreakEats LLC +*Product Engineer, Contract · 2024-2026* -Led product technology used by the German federal government and 7 of the top 10 DAX companies, handling 10,000+ live participants. Architected a fault-tolerant system for unreliable live-event connectivity. Progressed from business-development trainee to CTO, and helped pivot the product portfolio during the COVID-19 disruption. +R&D alongside a former NVIDIA manager and multiple-patent holder on novel audio-motion signal processing, pursuing patent protection. Designed real-time synchronization and pattern recognition across nine frequency bands, combining FFT-based frequency analysis with accelerometer, gyroscope and headphone-motion data. Built the supporting infrastructure: Swift/CoreMotion capture with Accelerate/vDSP, LiveKit and WebRTC streaming, Python signal analysis, latency-aware matching, Swift Testing/XCTest coverage, and diagnostic timelines for visual debugging. ### FAMFAM via DAYONE *Senior Frontend Developer, Contract · 2024* @@ -58,10 +58,10 @@ Built FAMFAM, a music-community and event app co-founded by the Keinemusik DJ co Took a B2C eLearning platform from concept to paying customers in three months, supporting 3,000+ active students and 100+ instructors. Owned architecture, frontend, backend and the core commercial integrations: Next.js, TypeScript, Strapi, authentication, courses, video, quizzes (27,000+ quiz results), progress tracking, certificates, Stripe payments and subscriptions, Calendly. -### BreakEats LLC -*Product Engineer, Contract · 2024-2026* +### VOXR GmbH +*CTO, Employee with Revenue Share · 2017-2020* -R&D alongside a former NVIDIA manager and multiple-patent holder on novel audio-motion signal processing, pursuing patent protection. Designed real-time synchronization and pattern recognition across nine frequency bands, combining FFT-based frequency analysis with accelerometer, gyroscope and headphone-motion data. Built the supporting infrastructure: Swift/CoreMotion capture with Accelerate/vDSP, LiveKit and WebRTC streaming, Python signal analysis, latency-aware matching, Swift Testing/XCTest coverage, and diagnostic timelines for visual debugging. +Led product technology used by the German federal government and 7 of the top 10 DAX companies, handling 10,000+ live participants. Architected a fault-tolerant system for unreliable live-event connectivity. Progressed from business-development trainee to CTO, and helped pivot the product portfolio during the COVID-19 disruption. ## Also diff --git a/sources/cosmin-poieana.md b/sources/cosmin-poieana.md index 0d83003..568270a 100644 --- a/sources/cosmin-poieana.md +++ b/sources/cosmin-poieana.md @@ -9,14 +9,16 @@ website: "https://wandercode.ltd" email: "cmin764@gmail.com" proof: - "Two startups acquired: Fashwell by Apple, Comfy by Siemens" - - "2B+ tokens/month across production agentic workflows" + - "~2B tokens/month across production agentic workflows" - "5,000+ job channels, 10k-user open-source community" - "13+ years Python, embedded fractional engineer" --- ## Summary -AI handles the repetition. Humans fill the gaps that need judgment. Cosmin builds the systems that make that split work in production. 13+ years of Python, a decade of full-time roles at startups (two acquired: Fashwell to Apple, Comfy to Siemens), and a methodology for it: Blugen, wrapping non-deterministic AI generation in deterministic blueprints for reproducible output. Now available for fractional AI product strategy, working across multi-agent architectures, RAG pipelines, and AI compliance tooling to help B2B startups move from AI experiments to production-grade intelligent products. +AI handles the repetition. Humans fill the gaps that need judgment. Cosmin builds the systems that make that split work in production: 13+ years of Python, two startups acquired (Fashwell to Apple, Comfy to Siemens), and a methodology for it, Blugen, wrapping non-deterministic AI generation in deterministic blueprints for reproducible output. + +Now available for fractional AI product strategy, working across multi-agent architectures, RAG pipelines, and AI compliance tooling to help B2B startups move from AI experiments to production-grade intelligent products. ## Expertise @@ -37,11 +39,16 @@ AI handles the repetition. Humans fill the gaps that need judgment. Cosmin build Building an AI audit trail for regulated industries (banking, healthcare, defense). The `traced-ai` library auto-patches LLM clients at import time: raw I/O goes to a local SQLite store that never leaves the client perimeter, while SHA-256 hashes and rationale strings are sent to an append-only chained ledger in the cloud. Rule registry maps EU AI Act, ISO 42001, and SOC 2 requirements to concrete logging obligations per decision type. -### Wandercode via VONQ +### VONQ via Wandercode *Embedded AI Engineer · 2025-2026* Serving a recruitment marketing platform with 5,000+ job channels. Shipped four AI products in parallel: a Meeting Assistant (Recall.ai, Google Meet, ElevenLabs, live private hints for interviewers), Interview Retry (Retell, audio session recovery), a Knowledge Base with Careers Agent (Firecrawl, Pinecone, OpenAI embeddings, CV-to-job RAG matching), and a language assessment MVP for a major European client producing scored PDF dossiers. Now running ~2B tokens/month across these systems. +### A5 Labs via Wandercode +*2025* + +Built Python/FastAPI services and a C++ inference server delivering Game Theory Optimal (GTO) and reinforcement learning strategies for high-stakes poker. Three-service mesh with response-time-constrained routing, automated regression benchmark via Bitbucket CI. + ### Sema4.ai *2023-2024* @@ -57,11 +64,6 @@ Built the Python RPA library ecosystem: intelligent document processing, browser Architected microservices for a smart buildings IoT platform (Go + Python/Django, gRPC/protobuf, PostGIS). Saw the full arc of the acquisition. -### Wandercode via A5 Labs -*2025* - -Built Python/FastAPI services and a C++ inference server delivering Game Theory Optimal (GTO) and reinforcement learning strategies for high-stakes poker. Three-service mesh with response-time-constrained routing, automated regression benchmark via Bitbucket CI. - ## Tech Stack **Languages:** Python (13+ years professional), TypeScript/JavaScript, Go, C/C++, SQL diff --git a/templates/nomoreapply.typ b/templates/nomoreapply.typ index 42c2138..a77dddf 100644 --- a/templates/nomoreapply.typ +++ b/templates/nomoreapply.typ @@ -13,8 +13,11 @@ #let lightgrey = rgb("#E4E4E7") // dividers and card borders #let offwhite = rgb("#FAFAFA") // text on dark bands -#let doc_name = "$name$$if(team_name)$$team_name$$endif$" -#let doc_role = "$if(role)$$role$$endif$$if(team_tagline)$$team_tagline$$endif$" +// Pandoc renders substituted metadata as Typst content (it may contain markdown +// constructs like #emph, #cite, or escaped characters), never as a plain string. +// Interpolating it inside "..." breaks the moment a value has a quote, @mention, +// or markdown syntax. Always interpolate metadata as a content block: [...]. +#let doc_name = [$name$$if(team_name)$$team_name$$endif$] #set page( paper: "a4", @@ -41,23 +44,26 @@ #set text(font: "Inter", size: 10pt, fill: nearblack) #set par(leading: 0.75em, spacing: 0.75em) -// Section heading: accent bar above, small bold uppercase eyebrow label -#show heading.where(level: 2): it => { - v(0.9em, weak: true) - rect(width: 14pt, height: 2pt, fill: red) - v(0.2em) - text(size: 7.5pt, fill: faintgrey, weight: "bold", tracking: 0.12em)[ +// Section heading: accent bar above, small bold uppercase eyebrow label. +// block(sticky: true) keeps the heading glued to what follows so it can't +// strand alone at a page bottom (Typst's default heading behavior, which the +// text()+v() shape above would otherwise discard). +#show heading.where(level: 2): it => block(sticky: true, below: 0pt)[ + #v(0.9em, weak: true) + #rect(width: 14pt, height: 2pt, fill: red) + #v(0.2em) + #text(size: 7.5pt, fill: faintgrey, weight: "bold", tracking: 0.12em)[ #upper(it.body) ] - v(0.3em) -} + #v(0.3em) +] -// Work-entry heading: bold company/project name -#show heading.where(level: 3): it => { - v(0.4em) - text(size: 10.5pt, weight: "bold")[#it.body] - v(0.05em) -} +// Work-entry heading: bold company/project name, glued to its meta line/body +#show heading.where(level: 3): it => block(sticky: true, below: 0pt)[ + #v(0.4em) + #text(size: 10.5pt, weight: "bold")[#it.body] + #v(0.05em) +] // Meta line under a level-3 heading, written as *italic* in source markdown #show emph: set text(fill: darkgrey, size: 9pt, style: "normal") @@ -66,31 +72,32 @@ #set list(indent: 1em, spacing: 0.4em) #show list: set par(leading: 0.65em, spacing: 0.4em) -// Member card: subtle left border (team mode) +// Member card: subtle left border (team mode). breakable: false keeps the +// whole card, and its left accent rule, on one page. #let accentcard(body) = block( width: 100%, + breakable: false, inset: (left: 12pt, top: 6pt, bottom: 6pt, right: 0pt), stroke: (left: 2pt + lightgrey), spacing: 0.8em, body ) -// Proof band: a row of stat cells with a muted rule above and below +// Proof band: a row of stat cells with a muted rule above and below. +// "medium" (500) isn't in templates/fonts/ (only 400/600/700), so Typst +// silently substitutes the nearest weight - keep it at the default weight. #let proofband(items) = block(width: 100%, above: 0.6em, below: 0.6em)[ #line(length: 100%, stroke: 0.5pt + lightgrey) #v(0.5em) #grid( columns: (1fr,) * items.len(), column-gutter: 10pt, - ..items.map(it => text(size: 8.5pt, fill: darkgrey, weight: "medium")[#it]) + ..items.map(it => text(size: 8.5pt, fill: darkgrey)[#it]) ) #v(0.5em) #line(length: 100%, stroke: 0.5pt + lightgrey) ] -// Wrap a Notable Work entry so its heading cannot strand at a page bottom -#let workentry(body) = block(width: 100%, breakable: false, below: 0.5em, body) - $if(individual)$ // INDIVIDUAL PROFILE @@ -110,9 +117,7 @@ $if(individual)$ ] $if(proof)$ -#proofband(( - $for(proof)$"$proof$",$endfor$ -)) +#proofband(($for(proof)$[$proof$],$endfor$)) $else$ #v(0.3em) #line(length: 100%, stroke: 0.5pt + lightgrey) From 2aa0a22e5b934667f2975edad6fc2ed21c130e18 Mon Sep 17 00:00:00 2001 From: Cosmin Poieana Date: Fri, 4 Sep 2026 22:44:14 +0300 Subject: [PATCH 3/3] Widen gap between work-entry heading and meta line v(0.05em) after the bold company/project heading left almost no space before the italic role/year line, reading as cramped. --- templates/nomoreapply.typ | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/templates/nomoreapply.typ b/templates/nomoreapply.typ index a77dddf..64c2d08 100644 --- a/templates/nomoreapply.typ +++ b/templates/nomoreapply.typ @@ -62,7 +62,7 @@ #show heading.where(level: 3): it => block(sticky: true, below: 0pt)[ #v(0.4em) #text(size: 10.5pt, weight: "bold")[#it.body] - #v(0.05em) + #v(0.35em) ] // Meta line under a level-3 heading, written as *italic* in source markdown