|
| 1 | +# Code Sync → Jekyll migration prompt (codesync-migration.v2) |
| 2 | + |
| 3 | +## Purpose |
| 4 | + |
| 5 | +Migrate codesync.global — currently served by an obsolete Sonata (PHP) CMS — to a |
| 6 | +static Jekyll site hosted on GitHub, continuing the work started in |
| 7 | +https://github.com/esl/jekyll-codesync-global-monika. The domain codesync.global |
| 8 | +is KEPT and will point at the new site. The site's single primary job is to |
| 9 | +promote upcoming Code Sync conferences; its secondary job is to be a complete, |
| 10 | +accurate index of past conferences. |
| 11 | + |
| 12 | +Everything produced by this migration is a **static site**: Jekyll builds plain |
| 13 | +HTML/CSS/JS at build time, GitHub Pages serves the files. No server-side code, |
| 14 | +no database, no admin panel. Content edits happen via git. Nothing dynamic |
| 15 | +survives except optional client-side JavaScript, and even that is avoided for |
| 16 | +archival content. |
| 17 | + |
| 18 | +## Repo strategy |
| 19 | + |
| 20 | +- THIS repo is the hub only: upcoming conferences, the all-conferences listing, |
| 21 | + brand pages, and links out to per-brand sites. No full conference sub-sites |
| 22 | + live here. |
| 23 | +- ESL's established convention (verify on github.com/esl) is one Jekyll repo per |
| 24 | + conference brand with its own domain via CNAME and past editions under |
| 25 | + `archives/<city_year>/` (e.g. code-beam-europe/archives/berlin_2024). Existing |
| 26 | + brand repos include: code-beam-europe, code-beam-america, code-beam-stockholm, |
| 27 | + code-beam-mexico, code-beam-nyc, code-beam-london, code-beam-vancouver, |
| 28 | + elixirconf-eu-jekyll, virtual-elixirconf-eu-jekyll, elixirconf-us, |
| 29 | + elixirconf-brasil. |
| 30 | +- Conferences currently hosted inside the CMS are extracted OUT: |
| 31 | + - brand already has a repo → add the edition under that repo's `archives/` |
| 32 | + - no brand repo → create one modeled on code-beam-europe's structure |
| 33 | +- Expect the migration to produce commits/PRs across multiple ESL repos, not |
| 34 | + just this one. |
| 35 | + |
| 36 | +## Inputs |
| 37 | + |
| 38 | +- The hub Jekyll repo (local working copy) — analyse existing layouts, data |
| 39 | + files and conventions before adding anything; extend them, don't |
| 40 | + parallel-build. |
| 41 | +- The live site https://codesync.global/ — read-only source of truth for |
| 42 | + content that still exists; it will be decommissioned. |
| 43 | +- Conference sub-sites hosted inside the CMS (schedules, speaker pages, photos). |
| 44 | +- External schedule providers used by some conferences: Whova and/or Sessionize. |
| 45 | +- Code Sync YouTube channel + playlists — data source for the future videos |
| 46 | + section, and the only surviving record of some lost conferences (e.g. |
| 47 | + Elixir LDN). |
| 48 | +- The Wayback Machine — fallback source for lost conference pages. |
| 49 | +- The existing ESL brand repos — both as the structural template and as |
| 50 | + migration targets. |
| 51 | + |
| 52 | +## Scope |
| 53 | + |
| 54 | +IN: |
| 55 | + |
| 56 | +1. Upcoming conferences prominently featured (the site's main goal). |
| 57 | +2. /conferences/ page listing ALL past conferences, grouped into brand sections |
| 58 | + (as on the current site), each section ordered most-recent-first. Exactly |
| 59 | + ONE canonical listing: the main-nav "all conferences" link and the banner |
| 60 | + "all past conferences" link must resolve to the same page with the same |
| 61 | + ordering. |
| 62 | +3. Extraction of CMS-hosted conference sub-sites into brand repos (see Repo |
| 63 | + strategy): |
| 64 | + - speaker sections including speaker photos (download and commit the assets) |
| 65 | + - schedule/agenda sections rebuilt as native static HTML/Liquid — extract |
| 66 | + the Whova/Sessionize/CMS data and render it, don't embed iframes |
| 67 | +4. YouTube DATA capture during the inventory pass: for every conference, |
| 68 | + record its playlist URL (and where cheap, the video list: title, speaker, |
| 69 | + video ID) in the hub's conference data. This feeds the future videos |
| 70 | + section; the section itself is NOT built yet. |
| 71 | +5. Reconstruction of lost conferences where feasible (YouTube playlists, |
| 72 | + Wayback Machine). A reconstructed page shows only what the sources support. |
| 73 | + |
| 74 | +OUT (do not build): |
| 75 | + |
| 76 | +- Blog posts or articles of any kind. |
| 77 | +- Hosted/iframed video archive pages. |
| 78 | +- Registration/ticketing sections of migrated conferences. |
| 79 | +- The videos-section UI — awaiting design. Only the underlying data is in |
| 80 | + scope. |
| 81 | + |
| 82 | +## Tasks to VERIFY before building (do not trust this description) |
| 83 | + |
| 84 | +- The reported discrepancy: on the live site, the "all conferences" nav link |
| 85 | + and the banner "all past conferences" link allegedly show different |
| 86 | + conference ORDERING. Confirm on the live site and document what each |
| 87 | + actually shows before fixing. |
| 88 | +- Which conferences are CMS-hosted vs. already in a brand repo vs. lost. |
| 89 | + Produce the inventory (see Output) before migrating anything. |
| 90 | +- For each conference with a schedule: whether it uses Whova, Sessionize, or |
| 91 | + bespoke CMS markup, and whether the data is still retrievable. |
| 92 | +- The exact structure of a brand repo's `archives/` edition before creating |
| 93 | + new ones — copy the convention, don't approximate it. |
| 94 | + |
| 95 | +## Output |
| 96 | + |
| 97 | +- Commits to the hub repo following its existing structure and conventions; |
| 98 | + conference content as structured data (front matter / `_data`), not |
| 99 | + hard-coded HTML sections — the CMS's hard-coded sections are what we're |
| 100 | + escaping. |
| 101 | +- Branches/PRs to brand repos for extracted archive editions. |
| 102 | +- A migration inventory (markdown file in the hub repo) listing every |
| 103 | + conference with: brand, year, status |
| 104 | + (migrated-to-\<repo\> | partial | lost | reconstructed-from-\<source\>), |
| 105 | + schedule source (whova/sessionize/cms/none), YouTube playlist URL or "none", |
| 106 | + and what's missing for partial ones. |
| 107 | +- For anything reconstructed: a note in front matter recording the source. |
| 108 | + |
| 109 | +## Constraints |
| 110 | + |
| 111 | +- NEVER invent conference data — no guessed dates, speaker names, talk titles, |
| 112 | + or bios. Missing fields are null/omitted and recorded in the inventory. |
| 113 | +- Don't destroy or rewrite existing work in any repo without flagging it first. |
| 114 | +- Downloaded assets (speaker photos) are committed to the target repo, not |
| 115 | + hot-linked to the CMS (it's going away). |
| 116 | +- Preserve the current site's brand grouping on /conferences/. |
| 117 | +- The domain persists, so old codesync.global URLs will otherwise 404: keep |
| 118 | + high-traffic paths stable where practical, and produce a list of old→new |
| 119 | + URL mappings for anything that moves (for redirects or an updated 404 page). |
| 120 | +- Don't push to brand-repo default branches — PRs only, they're live sites. |
| 121 | + |
| 122 | +## Errors / edge cases |
| 123 | + |
| 124 | +- Live page unreachable or schedule data gone → mark the conference `partial` |
| 125 | + or `lost` in the inventory with the reason; move on, don't stall. |
| 126 | +- Whova/Sessionize data behind JS or auth → report which conferences are |
| 127 | + affected and what access is needed; don't scrape around auth walls. |
| 128 | +- Speaker photo missing → ship the speaker entry without a photo, list it in |
| 129 | + the inventory; no placeholder stock images. |
| 130 | +- Ambiguous brand assignment or conference identity → ask, don't guess. |
| 131 | +- No write access to a brand repo → prepare the changes in a branch/patch and |
| 132 | + flag it, don't silently skip. |
0 commit comments