.liquid files)_data/ JS files)https://www.ftpartners.com/assets/ (mapped from /assets/)_data/ # JS data files — each fetches a Contentful content type
_includes/ # Layouts, partials, utilities
utils/
entry-fetcher.js # Wraps Contentful SDK, handles pagination
slugify.js
fintech-strategic-insights/ # Research report pages
interviews/ # VIP panel / interview pages
| Content Type ID | Description | URL Pattern |
|---|---|---|
researchReportPage |
Research reports (main library) | /fintech-strategic-insights/{slug}/ |
almanacReportPage |
Almanac reports (special layout) | /fintech-strategic-insights/{slug}/ |
vipConferencePage |
VIP panel video pages | /interviews/{slug}/ |
interview |
Executive interview pages | /fintech-strategic-insights/library/interviews/{slug}/ |
curatedList |
Ordered lists of mixed content items | Keyed by internalId field |
customPage |
Catch-all for misc pages | Uses internalUrl field |
| Field | Type | Notes |
|---|---|---|
title |
Short text | |
slug |
Short text | Used in permalink |
featureTitle |
Short text | Headline on feature/landing sections |
featuredSummary |
RichText | ⚠️ Must be RichText document, NOT a string |
featuredImage |
Asset link | |
coverImage |
Asset link | Cover shown on detail page |
ctaLabel |
Short text | Button label (default: "View") |
reportUrl |
Short text | DocSend/external link (use when no PDF) |
reportPdf |
Asset link | Direct PDF asset (optional) |
summary |
RichText | Full executive summary on detail page |
slideImages |
Asset array | Featured page slides (lightbox) |
cardTitle |
Short text | Card heading on index listing |
cardSummary |
RichText | ⚠️ Must be RichText document, NOT a string |
| Field | Type | Notes |
|---|---|---|
title |
Short text | Full conference title |
slug |
Short text | Used in permalink |
vimeoUrl |
Short text | Full Vimeo player URL (https://player.vimeo.com/video/{ID}) |
featuredImage |
Asset link | Primary image (shown below video) |
coverImage |
Asset link | Cover image (fallback for featuredImage) |
summary |
RichText | Full conference description |
slideImages |
Asset array | Optional: Featured slides (lightbox) |
cardTitle |
Short text | Card heading on index listing |
cardSummary |
RichText | Card description (falls back to summary) |
cardImage |
Asset link | Card image (falls back to featuredImage) |
cardCtaLabel |
Short text | Card button label (falls back to ctaLabel, then "Watch the recording") |
publicationDate |
Date | Conference date (used for sorting) |
ctaLabel |
Short text | Detail page button label |
includeInList |
Boolean | Controls visibility in index listings. If false, page is still built and accessible via direct URL but hidden from listing pages. |
| Field | Type | Notes |
|---|---|---|
title |
Short text | Almanac title (e.g., "FinTech Almanac Q4 2024") |
slug |
Short text | Used in permalink |
category |
Short text | Category for grouping (e.g., "fintech", "insurtech", "payments") |
year |
Number | Publication year (e.g., 2024, 2025) |
quarter |
Number | Quarter: 1-3 for quarterly, 4 for annual/full-year reports |
reportTitle |
Short text | Optional subtitle for the report section |
summary |
RichText | Almanac introduction/description |
coverImage |
Asset link | Cover image shown with report |
reportUrl |
Short text | DocSend/external link (use when no PDF) |
reportPdf |
Asset link | Direct PDF asset (optional) |
ctaLabel |
Short text | Button label (default: "View Report") |
slideImages |
Asset array | Featured page thumbnails (lightbox) |
leftContent |
RichText | Left column content (full template only) |
rightContent |
RichText | Right column content (full template only) |
Template Behavior:
title and reportPdf are defined → renders just title + PDF viewersummary, coverImage, slideImages, or content fields are defined → renders full almanac layoutcategory, sorted by year/quarter DESC
content_type: "almanac" for trackingFile: contentful-import-research-reports.json (created per-batch, not committed)
{
"assets": [ ... ],
"entries": [ ... ]
}
{
"sys": { "id": "asset-{slug}-cover" },
"fields": {
"title": { "en-US": "Description" },
"file": {
"en-US": {
"contentType": "image/png",
"fileName": "filename.png",
"url": "https://www.ftpartners.com/assets/images/..."
}
}
}
}
⚠️ Use "url" — NOT "upload" — for the file field key.
{
"sys": {
"id": "research-report-{slug}",
"contentType": { "sys": { "type": "Link", "linkType": "ContentType", "id": "researchReportPage" } }
},
"fields": {
"title": { "en-US": "..." },
"slug": { "en-US": "..." },
"featureTitle": { "en-US": "..." },
"ctaLabel": { "en-US": "View" },
"reportUrl": { "en-US": "https://finte.ch/..." },
"featuredImage": { "en-US": { "sys": { "type": "Link", "linkType": "Asset", "id": "asset-{slug}-cover" } } },
"coverImage": { "en-US": { "sys": { "type": "Link", "linkType": "Asset", "id": "asset-{slug}-cover" } } },
"slideImages": { "en-US": [ { "sys": { "type": "Link", "linkType": "Asset", "id": "asset-{slug}-slide-1" } }, ... ] },
"featuredSummary": { "en-US": { "nodeType": "document", "data": {}, "content": [ { "nodeType": "paragraph", ... } ] } },
"cardTitle": { "en-US": "..." },
"cardSummary": { "en-US": { "nodeType": "document", "data": {}, "content": [ { "nodeType": "paragraph", ... } ] } },
"summary": { "en-US": { "nodeType": "document", "data": {}, "content": [ ... ] } }
}
}
{
"nodeType": "document", "data": {},
"content": [
{ "nodeType": "paragraph", "data": {}, "content": [
{ "nodeType": "text", "value": "Text here.", "marks": [], "data": {} }
]}
]
}
{
"nodeType": "document", "data": {},
"content": [
{ "nodeType": "heading-4", "data": {}, "content": [
{ "nodeType": "text", "value": "Executive Summary:", "marks": [{ "type": "bold" }], "data": {} }
]},
{ "nodeType": "paragraph", "data": {}, "content": [
{ "nodeType": "text", "value": "Main summary text...", "marks": [], "data": {} }
]},
{ "nodeType": "paragraph", "data": {}, "content": [
{ "nodeType": "text", "value": "Key discussion topics of the report include:", "marks": [{ "type": "italic" }], "data": {} }
]},
{ "nodeType": "unordered-list", "data": {}, "content": [
{ "nodeType": "list-item", "data": {}, "content": [
{ "nodeType": "paragraph", "data": {}, "content": [
{ "nodeType": "text", "value": "Bullet item", "marks": [], "data": {} }
]}
]}
]}
]
}
When source HTML contains <a href="...">link text</a> inside summary paragraphs, use:
{ "nodeType": "hyperlink", "data": { "uri": "https://full-url-here.com" }, "content": [
{ "nodeType": "text", "value": "link text", "marks": [], "data": {} }
]}
Internal links using / must be converted to full URLs: https://www.ftpartners.com/.
⚠️ Only bilt-overview had inline links in its summary text. All other reports use plain text.
/assets/ = /assets/ → full URL = https://www.ftpartners.com/assets/images/...
Common image paths:
/assets/images/ftresearch/fintech-africa/
/assets/images/ftresearch/wift/
/assets/images/ftresearch/bilt/
/assets/images/ftresearch/what-to-watch/
/assets/images/ftresearch/spot-etf/
/assets/images/stablecoin/
/assets/images/interviews/wift-2025/
/assets/images/ftresearch/fintech-2025/
/assets/images/ftresearch/UnlockingDataCover.png
/assets/images/ftresearch/auto/
.liquid file to extract: title, slug, summary text, image paths, reportUrl, slide images, cardTitle/cardSummary (from index.liquid "Selected Reports" section)contentful-import-research-reports.json with assets + entrynpx contentful-import --space-id ... --management-token ... --content-file contentful-import-research-reports.json.liquid file — leaving it causes an 11ty output conflict with research-report-detail.liquid_data/curatedLists.js computes added.url per content type:
researchReportPage → /fintech-strategic-insights/{slug}/
almanacReportPage → /fintech-strategic-insights/{slug}/
vipConferencePage → /interviews/{slug}/
interview → /fintech-strategic-insights/library/interviews/{slug}/ (or bitlyLink if no slug)
customPage → item.fields.internalUrl
featuredSummary and cardSummary are RichText — sending a plain string causes a 422 validation errorfile key is "url" — using "upload" causes a 422 validation errorfinte.ch/...) are access-controlled viewers — cannot be imported as PDF assets; store in reportUrl field only.liquid file causes 11ty to fail — always delete the static file after import/ = site root (used for internal links in templates) → https://www.ftpartners.com/ for Contentful hyperlinksBatch 1: stablecoin-payments, women-in-fintech-2025, fintech-2025, digital-asset-ecosystem, parking-payments
Batch 2: fintech-in-africa-thriving-opportunity, women-in-fintech-resilience, bilt-overview, what-to-watch-2024, spot-etf
See "Selected Reports" section of fintech-strategic-insights/index.liquid for card copy:
fintech-in-india, innovations-in-payroll, women-in-fintech-rising-stars, blockchain-accounting, b2b-payments, blockchain-economy, women-in-fintech2022, race-to-super-app, buy-now-pay-later, open-banking-rearchitecting-financial-landscape, women-in-fintech, alternative-investments, challenger-banks, brazil-fintech, wealth-technology-report
Some entries (healthcare-payments, stablecoins video recap, youth-focused-fintech, insurtech, auto-fintech) link directly to external DocSend URLs and may not have a corresponding static .liquid page.