Skip to content

Commit bc54160

Browse files
committed
rename to merln
1 parent 660c54d commit bc54160

File tree

18 files changed

+791
-1390
lines changed

18 files changed

+791
-1390
lines changed

.cache/rss-cache.json

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
11
{
22
"https://gist.github.com/papes1ns.atom": {
3-
"etag": "W/\"9ef60a8a6c199529363faa68287ee7f0\""
3+
"etag": "W/\"6c83011f81bbb055bdee75ae39d61ab2\""
44
},
55
"https://spin.atomicobject.com/author/nathan-papes/feed/atom/": {
6-
"etag": "W/\"f392e21920f754a58df907f11165a405\"",
7-
"lastModified": "Tue, 05 Aug 2025 12:00:45 GMT"
6+
"etag": "W/\"b448a3baaba5315267deebb07bca42c1\"",
7+
"lastModified": "Thu, 07 Aug 2025 15:48:44 GMT"
88
},
99
"https://www.youtube.com/feeds/videos.xml?channel_id=UCPwv65XQty1QbqE04FitBlQ": {}
1010
}

.github/workflows/ci.yml

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
name: ci
2+
3+
on:
4+
workflow_dispatch:
5+
push:
6+
branches:
7+
- dev
8+
pull_request:
9+
branches:
10+
- dev
11+
12+
concurrency:
13+
group: ${{ github.workflow }}-${{ github.ref }}
14+
cancel-in-progress: true
15+
16+
jobs:
17+
validate:
18+
runs-on: ubuntu-latest
19+
steps:
20+
- name: checkout
21+
uses: actions/checkout@v4
22+
23+
- name: setup-bun
24+
uses: oven-sh/setup-bun@v1
25+
with:
26+
bun-version: latest
27+
28+
- name: install dependencies
29+
run: bun install --frozen-lockfile
30+
31+
- name: test
32+
run: bun run test
33+
34+
- name: validate
35+
run: bun run validate
36+
37+
- name: license check
38+
run: bun run license-check

.github/workflows/deploy.yml

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,12 @@ on:
88
required: true
99
default: "dev"
1010
type: string
11+
# workflow_run:
12+
# workflows: ["ci"]
13+
# types:
14+
# - completed
15+
# branches:
16+
# - dev
1117

1218
concurrency: ${{ github.workflow }}-${{ github.ref }}
1319

@@ -24,7 +30,7 @@ jobs:
2430
bun-version: latest
2531

2632
- name: Install dependencies
27-
run: bun install
33+
run: bun install --frozen-lockfile
2834

2935
- run: bun sst deploy --stage=${{ inputs.stage }}
3036
env:

.github/workflows/license-check.yml

Lines changed: 0 additions & 25 deletions
This file was deleted.

.github/workflows/validate.yml

Lines changed: 0 additions & 28 deletions
This file was deleted.

AGENTS.md

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3,10 +3,11 @@
33
## Commands
44

55
- Install dependencies: `bun install`
6-
- Dev server: `bun run --cwd packages/web dev`
7-
- Build: `bun run --cwd packages/web build`
8-
- Validate schema: `./script/validate.ts`
9-
- RSS feed update: `./script/rss.ts`
6+
- Dev server: `bun run dev`
7+
- Build: `bun run build`
8+
- Validate schema: `bun run validate`
9+
- RSS feed update: `bun run rss`
10+
- Test feeder: `bun run test`
1011
- Single test: (no tests in this repo)
1112

1213
## Code Style

README.md

Lines changed: 15 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -1,30 +1,23 @@
1-
[![license-check](https://github.com/papes1ns/spin.dev/actions/workflows/license-check.yml/badge.svg)](https://github.com/papes1ns/spin.dev/actions/workflows/license-check.yml)
2-
[![validate](https://github.com/papes1ns/spin.dev/actions/workflows/validate.yml/badge.svg)](https://github.com/papes1ns/spin.dev/actions/workflows/validate.yml)
3-
[![deploy](https://github.com/papes1ns/spin.dev/actions/workflows/deploy.yml/badge.svg)](https://github.com/papes1ns/spin.dev/actions/workflows/deploy.yml)
1+
[![license-check](https://github.com/papes1ns/merlin/actions/workflows/license-check.yml/badge.svg)](https://github.com/papes1ns/merlin/actions/workflows/license-check.yml)
2+
[![validate](https://github.com/papes1ns/merlin/actions/workflows/validate.yml/badge.svg)](https://github.com/papes1ns/merlin/actions/workflows/validate.yml)
3+
[![deploy](https://github.com/papes1ns/merlin/actions/workflows/deploy.yml/badge.svg)](https://github.com/papes1ns/merlin/actions/workflows/deploy.yml)
44

5-
<p align="center">
6-
<img src="https://natepapes.com/favicon.svg" alt="favicon" width="64" height="64"/>
7-
</p>
5+
![merln](packages/web/public/favicon.svg)
6+
<span style="font-weight: 800; font-size: 2rem; font-family:'IBM Plex Mono', monospace">merln</span>
87

9-
An experimental fullstack project exploring end-to-end type safety from data ingestion to the frontend using a shared schema validated across the stack.
8+
**M**etadata-**E**nriched-**R**SS-**L**inker-**N**ode
109

11-
This project builds on a fork of the excellent <a href="https://github.com/sst/models.dev">sst/models.dev</a> repo.
10+
## Overview
1211

13-
> The changes in this fork are purely for experimentation and demonstration in a blog post. While the RSS feeds and Open Graph metadata can be customized by anyone, this fork reflects my personal setup.
12+
An example `merln` project.
1413

15-
## TODO
14+
- [x] typesafe code
15+
- [x] schema validation
16+
- [x] FOSS license audit
17+
- [x] GDPR compliant
18+
- [x] automation
1619

17-
- [x] add licsense checker to audit the open source supply chain
18-
- [x] add robots.txt to disallow all scraping
19-
- [x] log warnings on UNKNOWN liscenses
20-
- [x] add pivacy page, no PII is collected, CF analytics tracks device data to protect the service
21-
- [x] add terms page, conform to GDPR in combo with the privacy page
22-
- [ ] setup a test suite using `bun:test` package ideally in its own module eg., `@spin.dev/test`
23-
- [ ] write unit test that the rss.ts script fails if the USER_AGENT is in a providers robots.txt
24-
- [ ] wrtie unit test that the rss.ts script fails if the HTTP status codes suggest not to scrape
25-
- [ ] setup preview environments for PRs
26-
- [ ] setup and end-to-end test script to test the robots.txt blocks scraping
27-
- [ ] make the main contents table mobile responsive
20+
`merln` is maintained by me. Originally started as a simple fork of an open source project by [SST](https://sst.dev). They are innovating across the board. Be sure to check them out!
2821

2922
## API
3023

@@ -70,9 +63,7 @@ export const Content = z
7063
title: z.string(),
7164
description: z.string().optional(),
7265
url: z.string().url("Must be a valid URL"),
73-
/** ISO-8601 timestamp of publish date */
7466
created_at: z.string(),
75-
/** Estimated reading time in minutes */
7667
estimated_time_minutes: z.number().int().positive().optional(),
7768
tags: z.array(z.string()).optional(),
7869
})
@@ -92,13 +83,7 @@ See existing providers in the `providers/` directory for reference:
9283
Make sure you have [Bun](https://bun.sh/) installed.
9384

9485
```bash
95-
$ bun install
96-
$ cd packages/web
97-
$ bun run dev
86+
bun run dev
9887
```
9988

10089
And it'll open the frontend at http://localhost:3000
101-
102-
---
103-
104-
spin.dev is a fork maintained by me inspired by the creators and maintainers of [SST](https://sst.dev). Please support and credit them for the awesome work they are doing.

0 commit comments

Comments
 (0)