Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
31 commits
Select commit Hold shift + click to select a range
04b4de9
feature: render catalog-driven bands for MP-103
tyemirov Nov 21, 2025
7222076
chore: remove band borders for cleaner sections
tyemirov Nov 21, 2025
56cf20b
style: expand full-width color bands
tyemirov Nov 21, 2025
eb18107
style: convert sections into flush bands
tyemirov Nov 21, 2025
3e53df6
style: ensure section bands span full viewport
tyemirov Nov 21, 2025
5df5da5
style: remove spacing between full-width bands
tyemirov Nov 21, 2025
0bf3bcf
feat: introduce mpr-band component for full-width sections
tyemirov Nov 21, 2025
7fd5282
feature: add catalog-driven favicons to product bands (MP-103)
tyemirov Nov 22, 2025
7136bb8
chore: provision icon slots for remaining projects
tyemirov Nov 22, 2025
89773db
feat: add handcrafted SVG favicons for remaining catalog projects
tyemirov Nov 22, 2025
1b8c94c
layout: move Research band below Products
tyemirov Nov 22, 2025
53b9dd7
layout: make band grids left-aligned two-up cards
tyemirov Nov 22, 2025
1fc58ed
layout: enforce two-column grid for bands
tyemirov Nov 22, 2025
d330c04
layout: widen bands and allow up to three cards per row
tyemirov Nov 22, 2025
9f7d522
layout: fix card width and wrap rows
tyemirov Nov 22, 2025
4c9bf67
layout: widen fixed card width to match original feel
tyemirov Nov 22, 2025
1189768
layout: restore centered 2-up grid with original card length
tyemirov Nov 22, 2025
a860b2b
layout: center-wrapped fixed-width cards in bands
tyemirov Nov 22, 2025
d2358e2
layout: lock bands to centered 2-column grid with dynamic card width
tyemirov Nov 22, 2025
dd44374
layout: full-width bands with centered fixed-width cards and wrapping
tyemirov Nov 22, 2025
620a0fe
layout: center full rows and left-align final partial row via band rows
tyemirov Nov 22, 2025
4af5498
style: add horizontal inset for band titles
tyemirov Nov 22, 2025
660e7ca
style: tighten band top padding and increase spacing beneath headings
tyemirov Nov 22, 2025
43d4253
layout: alternate left/right band rows with fixed-width cards
tyemirov Nov 22, 2025
ddb6ee6
layout: add 10px band-row inset and correct maxPerRow to prevent over…
tyemirov Nov 22, 2025
d512b23
style: remove rounded corners from hero media container
tyemirov Nov 22, 2025
60e0460
feat: wrap hero section in band container
tyemirov Nov 22, 2025
26ba0dd
style: force rectangular hero band (section, media, overlay, video)
tyemirov Nov 22, 2025
99f169c
layout: clamp cards to at most two per row and alternate full/partial…
tyemirov Nov 22, 2025
ab7978f
layout: increase band-row horizontal inset to give right-aligned card…
tyemirov Nov 22, 2025
31f6997
Docker image path for ghttp fixed
tyemirov Nov 22, 2025
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 3 additions & 1 deletion ISSUES.md
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ Each issue is formatted as `- [ ] [<ID>-<number>]`. When resolved it becomes -`
- [x] [MP-100] Replaced the sketch-based hero with the inline hero video (muted by default with an audio toggle) and refreshed the favicon using the provided JPEG source.
- [x] [MP-101] Changed the global theme to dark turquoise with golden typography, updating hero/sections/cards/buttons accordingly.
- [x] [MP-102] Integrated the declarative `<mpr-footer>` from mpr-ui (non-sticky, no theme switch) plus lab-wide quick links.
- [ ] [MP-103] Restructure landing page into four product bands
- [x] [MP-103] Restructure landing page into four product bands

Summary
- Rebuild the entire landing page information architecture (below the hero) around four top-level sections: Research, Tools, Platform, Products.
Expand Down Expand Up @@ -59,6 +59,8 @@ Each issue is formatted as `- [ ] [<ID>-<number>]`. When resolved it becomes -`
- Presence of section headings “Research”, “Tools”, “Platform”, “Products”.
- At least one project card rendered under each of those headings, driven by the JSON catalog.
- Every rendered card shows a name, description, and status badge, and either a working link or an explicit “coming soon” style when configured.
Outcome
- Created `data/projects.json`, rebuilt the four section bands to render cards from the catalog (status-sorted with static visuals), and added Playwright assertions for headings, cards, and link behavior.

## Improvements (200–299)

Expand Down
Binary file added assets/projects/ctx.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
34 changes: 34 additions & 0 deletions assets/projects/ets.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added assets/projects/ghttp.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added assets/projects/gix.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added assets/projects/gravity-notes.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added assets/projects/issues-md.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added assets/projects/ledger.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
30 changes: 30 additions & 0 deletions assets/projects/loopaware.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
27 changes: 27 additions & 0 deletions assets/projects/photolab.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added assets/projects/pinguin.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
43 changes: 43 additions & 0 deletions assets/projects/product-scanner.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added assets/projects/rsvp.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
34 changes: 34 additions & 0 deletions assets/projects/sheet2tube.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
23 changes: 23 additions & 0 deletions assets/projects/tauth.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
144 changes: 144 additions & 0 deletions data/projects.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,144 @@
{
"projects": [
{
"id": "issues-md",
"name": "ISSUES.md",
"description": "Append-only lab worklog that tracks features, improvements, and maintenance activity across Marco Polo Research Lab projects.",
"status": "WIP",
"category": "Research",
"url": "https://github.com/MarcoPoloResearchLab/marcopolo.github.io/blob/main/ISSUES.md",
"public": true,
"icon": "assets/projects/issues-md.png"
},
{
"id": "photolab",
"name": "Photolab",
"description": "Local photo library classifier and search UI that writes high-confidence labels into EXIF, indexes metadata into SQLite, and serves a minimal browser-based search grid.",
"status": "WIP",
"category": "Research",
"url": null,
"public": false,
"icon": "assets/projects/photolab.svg"
},
{
"id": "ctx",
"name": "ctx",
"description": "Terminal-first project explorer for browsing trees, reading files with embedded docs, analysing call chains, and fetching upstream docs from GitHub via one CLI.",
"status": "Production",
"category": "Tools",
"url": "https://github.com/tyemirov/ctx",
"public": true,
"icon": "assets/projects/ctx.png"
},
{
"id": "gix",
"name": "gix",
"description": "Git and GitHub maintenance CLI for keeping large fleets of repositories healthy by normalising folder names, aligning remotes, and automating audit/release workflows.",
"status": "Production",
"category": "Tools",
"url": "https://github.com/tyemirov/gix",
"public": true,
"icon": "assets/projects/gix.png"
},
{
"id": "ghttp",
"name": "gHTTP",
"description": "Go-powered static file server that mirrors python -m http.server while adding Markdown rendering, structured logging, and easy HTTPS provisioning for local work or containers.",
"status": "Production",
"category": "Tools",
"url": "https://github.com/temirov/ghttp",
"public": true,
"icon": "assets/projects/ghttp.png"
},
{
"id": "loopaware",
"name": "LoopAware",
"description": "Customer feedback platform with an embeddable widget, Google-authenticated dashboard, and APIs for collecting, triaging, and responding to product messages.",
"status": "Production",
"category": "Platform",
"url": "https://loopaware.mprlab.com",
"public": true,
"icon": "assets/projects/loopaware.svg"
},
{
"id": "pinguin",
"name": "Pinguin",
"description": "Production-ready notification service that exposes a gRPC API for email and SMS, persists jobs in SQLite, and retries failures with an exponential-backoff scheduler.",
"status": "Production",
"category": "Platform",
"url": "https://github.com/temirov/pinguin",
"public": true,
"icon": "assets/projects/pinguin.png"
},
{
"id": "ets",
"name": "Ephemeral Token Service (ETS)",
"description": "JWT + DPoP gateway that mints short-lived, browser-bound access tokens and reverse-proxies requests so front-end apps never handle provider secrets directly.",
"status": "Beta",
"category": "Platform",
"url": "https://ets.mprlab.com",
"public": true,
"icon": "assets/projects/ets.svg"
},
{
"id": "tauth",
"name": "TAuth",
"description": "Google Sign-In and session service that verifies ID tokens, issues short-lived JWT cookies, and ships a tiny auth-client.js helper for same-origin apps.",
"status": "Production",
"category": "Platform",
"url": "https://tauth.mprlab.com",
"public": true,
"icon": "assets/projects/tauth.svg"
},
{
"id": "ledger",
"name": "Ledger Service",
"description": "Standalone gRPC-based virtual credits ledger that tracks grants, reservations, captures, and releases in an append-only store backed by SQL with full auditability.",
"status": "Beta",
"category": "Platform",
"url": "https://github.com/tyemirov/ledger",
"public": true,
"icon": "assets/projects/ledger.png"
},
{
"id": "product-scanner",
"name": "Product Scanner",
"description": "Product detail page auditor that crawls listings, evaluates them against configurable rule packs, and reports gaps through a CLI and authenticated dashboard.",
"status": "Beta",
"category": "Products",
"url": "https://ps.mprlab.com",
"public": true,
"icon": "assets/projects/product-scanner.svg"
},
{
"id": "sheet2tube",
"name": "Sheet2Tube",
"description": "CSV and web toolkit that round-trips YouTube channel metadata between spreadsheets and your account plus a GPT-powered helper for expanding scripted placeholders.",
"status": "Beta",
"category": "Products",
"url": "https://sheet2tube.mprlab.com",
"public": true,
"icon": "assets/projects/sheet2tube.svg"
},
{
"id": "gravity-notes",
"name": "Gravity Notes",
"description": "Single-page Markdown notebook with an inline card grid, offline-first storage, and Google-backed sync so ideas flow without modal dialogs or context switches.",
"status": "Production",
"category": "Products",
"url": "https://gravity.mprlab.com",
"public": true,
"icon": "assets/projects/gravity-notes.png"
},
{
"id": "rsvp",
"name": "RSVP",
"description": "Event invitation platform that generates QR-code-powered invites, tracks responses, and supports both local and production TLS setups for secure guest flows.",
"status": "Production",
"category": "Products",
"url": "https://rsvp.mprlab.com",
"public": true,
"icon": "assets/projects/rsvp.png"
}
]
}
2 changes: 1 addition & 1 deletion docker-compose.yml
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
services:
site:
image: ghcr.io/temirov/ghttp:latest
image: ghcr.io/tyemirov/ghttp:latest
container_name: mprlab-site
restart: unless-stopped
env_file:
Expand Down
Loading