Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
69 commits
Select commit Hold shift + click to select a range
f9e0531
feat(roadmap): add roadmap page with json data loading logic with sim…
adrianboros Apr 16, 2026
ae54895
feat(roadmap): bun format fix
adrianboros Apr 16, 2026
3c84220
fix(roadmap-page): add env var
adrianboros Apr 17, 2026
40744a8
feat(roadmap): update timeline to group projects by teams, and color …
adrianboros Apr 20, 2026
6f039c3
fix(roadmap): lint fix
adrianboros Apr 20, 2026
a6c6466
fix(roadmap): have teams name stay visible on the screen
adrianboros Apr 20, 2026
f4220eb
chore(deps): add netlify adapter, blobs, functions, and linear sdk
adrianboros Apr 20, 2026
44feb04
build(astro): switch to hybrid SSR mode with Netlify adapter
adrianboros Apr 20, 2026
f5fc50c
feat(linear): add Linear client and snapshot builder
adrianboros Apr 20, 2026
e020d0d
feat(functions): add scheduled Linear sync function (every 12h)
adrianboros Apr 20, 2026
ead28ca
feat(functions): add manual sync endpoint (POST /api/sync)
adrianboros Apr 20, 2026
60321f3
feat(roadmap): switch roadmap page to SSR, read from Netlify Blobs
adrianboros Apr 20, 2026
a47915b
chore(config): remove ROADMAP_API_URL, add Linear and Netlify env vars
adrianboros Apr 20, 2026
d3a284b
chore(deps): downgrade astro netlify adaptor to work with astro v5
adrianboros May 7, 2026
c9e7280
chore(deps): add deno.lock and .netlify folder
adrianboros May 7, 2026
a30cf31
build(astro): "hybrid" was removed in Astro 5.x and needs to be chang…
adrianboros May 7, 2026
087d867
Merge branch 'main' into feat/roadmap-page
adrianboros May 7, 2026
ddd5462
chore(deps): fix packages after merge from main
adrianboros May 7, 2026
502b774
chore(deps): lint issues
adrianboros May 7, 2026
161a3a1
fix(roadmap-page): lighten up the teams colors
adrianboros May 7, 2026
62178ec
fix(roadmap-page): mobile view with tap on milestones to view titles
adrianboros May 7, 2026
90b76fb
fix(linear): fix type error on build linear data snapshot
adrianboros May 7, 2026
0d180ea
fix(roadmap-page): remove logs, lint fixes and small styling update
adrianboros May 8, 2026
5c70d06
fix(roadmap-page): remove project links completely from the page
adrianboros May 8, 2026
5c75c3d
chore(deps): update netlify.toml to add the roadmap redirects before …
adrianboros May 8, 2026
2843382
chore(deps): netlify.toml redirect cleanup
adrianboros May 8, 2026
f5deb0f
chore(deps): netlify.toml redirect cleanup wip and bun format
adrianboros May 8, 2026
16fe966
chore(deps): fix lint issues
adrianboros May 8, 2026
426a64f
Merge branch 'main' into feat/roadmap-page
adrianboros May 8, 2026
3b73457
chore(deps): netlify redirect issue
adrianboros May 8, 2026
d2fb0db
chore(deps): netlify redirect issue
adrianboros May 8, 2026
0b243eb
chore(deps): netlify redirect issue, revert
adrianboros May 8, 2026
0384ea6
fix(roadmap-page): fix board over header menu issue
adrianboros May 8, 2026
0615999
fix(roadmap-page): refactor to have sticky board header
adrianboros May 8, 2026
d62f276
fix(linear-snapshot): filter out completed and cancelled projects
adrianboros May 8, 2026
194d9fd
fix(roadmap-page): team/projects column updates
adrianboros May 8, 2026
10bda5e
fix(roadmap-page): team/projects column updates
adrianboros May 8, 2026
256b57e
fix(linear): exclude projects based on non-public label
adrianboros May 8, 2026
787d6c8
chore(deps): netlify redirect issue
adrianboros May 19, 2026
092c6e4
fix(roadmap-page): date fallback fix
adrianboros May 19, 2026
ec84146
chore(deps): env params refactoring
adrianboros May 19, 2026
4d05eb3
fix(roadmap-page): header horizontal scrooling bidirectional sync wit…
adrianboros May 19, 2026
2adaa9e
fix(roadmap-page): set default team and project colors constants
adrianboros May 19, 2026
4202ea4
fix(roadmap-page): refactor roadmap board component break out utility…
adrianboros May 19, 2026
e38e3ed
fix(roadmap-page): add utility attributes for screen readers
adrianboros May 19, 2026
5f2514e
chore(deps): build fix
adrianboros May 19, 2026
9086f9c
chore(deps): lint fix
adrianboros May 19, 2026
56a2c34
fix(linear-snapshot): remove unused lastErr
adrianboros May 19, 2026
e32ee21
fix(linear-snapshot): remove initial/bad archived project filter
adrianboros May 19, 2026
a2fa793
fix(linear): requirement update - include only projects that have pub…
adrianboros May 19, 2026
c978210
chore(deps): lint fix
adrianboros May 19, 2026
e684349
chore(netlify): dev env settings fixes
adrianboros May 19, 2026
f3d3769
fix(linear): refactor type definitions merge Roadmap and Board types
adrianboros May 19, 2026
8a6b06d
chore(deps): lint fix
adrianboros May 19, 2026
c89fe2a
fix(linear): add generatedAt at the bottom of the page and remove las…
adrianboros May 19, 2026
031261c
fix(netliffy): extract purge cache utility function
adrianboros May 20, 2026
9dd3a1b
fix(netlify): add rate limiting on the endpoint and timing attacks im…
adrianboros May 20, 2026
a14d9d9
fix(roadmap-page): add a console error in case roadmap snapshot it no…
adrianboros May 20, 2026
75695b6
fix(linear): improve accesibility on page
adrianboros Jun 2, 2026
22e9566
fix(linear): improve project filtering to assign project to the main …
adrianboros Jun 2, 2026
2dd1702
fix(linear): local env fix when running netlify serverless functions
adrianboros Jun 4, 2026
8e41be1
chore(docs): update README to include node to netlify serverless func…
adrianboros Jun 4, 2026
4398a3d
Merge branch 'main' into feat/roadmap-page
adrianboros Jun 4, 2026
fba3bc0
chore(bun): regenerate bun.lock
adrianboros Jun 4, 2026
a45dff4
chore(bun): ignore local .netlify folder from both prettier and ESLint
adrianboros Jun 4, 2026
a793bab
chore(deps): small lint fix
adrianboros Jun 4, 2026
fa7650e
chore: updated details for local setup and debugging
JoblersTune Jun 5, 2026
0f3bcda
chore: typo fix
JoblersTune Jun 5, 2026
34ab644
chore: typo fix
JoblersTune Jun 5, 2026
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
32 changes: 32 additions & 0 deletions .env.example
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
# Variables marked "required" will cause a build/runtime error if missing in production.
# To build locally without these keys, run: bun run astro build -- --mode development

# -----------------------------------------------------------------------------
# Linear (required)
# -----------------------------------------------------------------------------

# Linear API key — used by sync functions to fetch roadmap data from Linear
# Get from: Linear → Settings → API → Personal API keys → Create key (read-only scope is sufficient)
LINEAR_API_KEY=lin_api_...

# Linear custom view ID containing the roadmap projects (required)
LINEAR_CUSTOM_VIEW_ID=27df73bc-50ec-4fc1-bbb2-d906236a5bbc

# -----------------------------------------------------------------------------
# Sync API (required)
# -----------------------------------------------------------------------------

# Bearer token for POST /api/sync (manual sync trigger) — set to any strong secret
API_SECRET=

# -----------------------------------------------------------------------------
# Netlify (optional — used for CDN cache purging after sync)
# -----------------------------------------------------------------------------

# Netlify Personal Access Token
# Get from: Netlify UI → User Settings → Applications → Personal access tokens
NETLIFY_API_TOKEN=

# Netlify Site ID — auto-injected by Netlify in production and by `netlify dev` after `netlify link`
# Set manually only if running sync functions outside of the Netlify CLI
# NETLIFY_SITE_ID=
4 changes: 4 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -23,8 +23,12 @@ pnpm-debug.log*
# lock files
bun.lock
bun.lockb
deno.lock
pnpm-lock.yaml
package-lock.json

# webstorm
.idea/

# Local Netlify folder
.netlify
1 change: 1 addition & 0 deletions .prettierignore
Original file line number Diff line number Diff line change
Expand Up @@ -3,5 +3,6 @@
node_modules
public
dist
.netlify
**/*.min.css
**/*.min.js
44 changes: 38 additions & 6 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -37,29 +37,48 @@ For more information about the way our documentation projects are set up, please

## Local Development

We are using [Bun](https://bun.sh/) in this repository, but you could theoretically use the package manager of your choice. To install Bun, run
This project requires the [Netlify CLI](https://docs.netlify.com/cli/get-started/) for local development. Running `bun run start` alone will produce a redirect loop — the Netlify CLI proxy is needed to handle routing correctly.

### Prerequisites

Install [Bun](https://bun.sh/) and the Netlify CLI:

```sh
curl -fsSL https://bun.sh/install | bash
npm install -g netlify-cli
```

### 🧞 Commands
Then link the repo to the Netlify site (one-time):

```sh
netlify login
netlify link
```

### Running locally

```sh
bun install
netlify dev # http://localhost:8888
```

All commands are run from the root of the project, from a terminal:
> **Troubleshooting:** If `netlify dev` fails with a Neon extension network error, run `netlify dev --offline` instead — this skips the extension install and everything else works normally. See [`docs/roadmap-linear-sync.md`](docs/roadmap-linear-sync.md) for details.

> **Note:** The roadmap page also requires a one-time blob population step after first run. See [`docs/roadmap-linear-sync.md`](docs/roadmap-linear-sync.md) for details.

### 🧞 Other commands

| Command | Action |
| :------------------------ | :----------------------------------------------- |
| `bun install` | Installs dependencies |
| `bun run start` | Starts local dev server at `localhost:1103` |
| `netlify dev` | Starts local dev server at `localhost:8888` |
| `bun run build` | Build your production site to `./dist/` |
| `bun run preview` | Preview your build locally, before deploying |
| `bun run astro ...` | Run CLI commands like `astro add`, `astro check` |
| `bun run astro -- --help` | Get help using the Astro CLI |
| `bun run format` | Format code and fix linting issues |
| `bun run lint` | Check code formatting and linting |

You can substitute the `bun` commands with whatever package manager of your choice uses.

### 🔍 Code Formatting

This project uses [ESLint](https://eslint.org/) for code linting and [Prettier](https://prettier.io/) for code formatting. Before submitting a pull request, please ensure your code is properly formatted:
Expand Down Expand Up @@ -99,6 +118,19 @@ This runs `gcloud compute url-maps invalidate-cdn-cache` against `/developers/*`

For more information about the main Interledger.org infrastructure and deployment pipeline, see the [`interledger.org-v4`](https://github.com/interledger/interledger.org-v4) repository.

## Netlify Serverless Functions

This project uses Netlify serverless functions to power the live roadmap page:

| Function | Purpose |
| :------------------------------- | :--------------------------------------------------------------------------------------------------- |
| `netlify/functions/sync.mts` | Scheduled sync — fetches roadmap data from Linear every 12 hours and caches it in Netlify Blobs |
| `netlify/functions/sync-now.mts` | Manual sync — exposes `POST /api/sync` (deployed) or `POST /.netlify/functions/sync-now` (local dev) |

The roadmap page is server-side rendered and reads from the blob cache on each request. The CDN caches the rendered HTML for 12 hours; the sync functions purge that cache after each update.

For full details on the architecture, environment variables, local development setup, and how Deploy Previews interact with the shared blob store, see [`docs/roadmap-linear-sync.md`](docs/roadmap-linear-sync.md).

Thank You for Contributing! We appreciate your effort to write a blog post and share your expertise with the community!

## Writing a blog post
Expand Down
3 changes: 3 additions & 0 deletions astro.config.mjs
Original file line number Diff line number Diff line change
Expand Up @@ -4,10 +4,13 @@ import starlightLinksValidator from 'starlight-links-validator'
import starlightFullViewMode from 'starlight-fullview-mode'

import mdx from '@astrojs/mdx'
import netlify from '@astrojs/netlify'
import { PUBLISHED_RFC_SIDEBAR_ITEMS } from './src/data/rfcs.ts'

// https://astro.build/config
export default defineConfig({
output: 'static',
Comment thread
adrianboros marked this conversation as resolved.
adapter: netlify(),
site: 'https://interledger.org',
base: '/developers',
integrations: [
Expand Down
Loading
Loading