Skip to content

Commit 6e944c9

Browse files
authored
feat/new site (#41)
* feat: working on new version of the site in Astro * feat: refactored code structure * feat: updated home page * feat: polish layout and design across homepage sections Add tablet padding (md:px-10), refine title-bar accent, add stat counter borders, improve nerd corner contrast, increase pill spacing, restyle readers/sponsors as two-column grid, reorder footer layout, remove OPML button rounding, and link readers section to founders anchor. * refactor: move images/ to public/archive-images/ and remove copy prebuild step * chore: minor improvements and added more creators * fix: pnpm locking
1 parent 88663f5 commit 6e944c9

File tree

6,265 files changed

+602371
-22008
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

6,265 files changed

+602371
-22008
lines changed

.claude/settings.local.json

Lines changed: 33 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,39 @@
22
"permissions": {
33
"allow": [
44
"Bash(pnpm dev)",
5-
"Bash(ls:*)"
5+
"Bash(ls:*)",
6+
"WebFetch(domain:docs.astro.build)",
7+
"Bash(for f in raw_archives/*/metadata.json)",
8+
"Bash(do jq -r '[.issueNumber, .date] | @tsv' \"$f\")",
9+
"Bash(done)",
10+
"Bash(node:*)",
11+
"Bash(mkdir:*)",
12+
"Bash(pnpm:*)",
13+
"Bash(npx playwright:*)",
14+
"Bash(lsof:*)",
15+
"Bash(do jq:*)",
16+
"Bash(python3:*)",
17+
"Bash(find:*)",
18+
"Bash(grep:*)",
19+
"Read(//tmp/**)",
20+
"Bash(__NEW_LINE_f8eea16f2bad7195__ echo:*)",
21+
"Read(//private/tmp/**)",
22+
"Bash(for dir:*)",
23+
"Bash(do echo:*)",
24+
"Read(//Users/luciano/repos/fullstackbulletin.com/raw_archives/*-$dir-*/**)",
25+
"Bash(cat:*)",
26+
"WebFetch(domain:fullstackbulletin.github.io)",
27+
"Bash(curl:*)",
28+
"WebSearch",
29+
"WebFetch(domain:pagefind.app)",
30+
"Bash(wc -l /Users/luciano/repos/fullstackbulletin.com/views/components/_*.pug)",
31+
"Bash(wc -l /Users/luciano/repos/fullstackbulletin.com/raw_archives/*/metadata.json)",
32+
"Bash(shasum -a 256 2017-03-13-001-introducing-lottie-airbnb-engineering-data-science/54ba1d29-fdc4-4e32-9470-dd844c9be037.png 2020-01-06-144-why-i-moved-from-react-to-svelte-and-others-will-follow/54ba1d29-fdc4-4e32-9470-dd844c9be037.png 2026-03-09-438-an-interactive-intro-to-crdts/54ba1d29-fdc4-4e32-9470-dd844c9be037.png)",
33+
"Bash(xargs shasum:*)",
34+
"WebFetch(domain:loige.co)",
35+
"Bash(duckdb --version)",
36+
"WebFetch(domain:sidebar.io)",
37+
"Bash(git:*)"
638
]
739
}
840
}

.github/workflows/build.yml

Lines changed: 4 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -13,19 +13,14 @@ jobs:
1313
steps:
1414
- uses: actions/checkout@v4
1515
- uses: pnpm/action-setup@v2
16-
with:
17-
version: 8.15
1816
- uses: actions/setup-node@v4
1917
with:
20-
node-version: 20
18+
node-version: 24
2119
cache: 'pnpm'
20+
cache-dependency-path: pnpm-lock.yaml
2221
- run: pnpm install --frozen-lockfile
23-
- name: Test
24-
run: pnpm test
25-
env:
26-
CI: true
2722
- name: Build
28-
run: pnpm prod:build
23+
run: pnpm build
2924
env:
3025
CI: true
3126
- name: Release to GH pages if on main
@@ -35,4 +30,4 @@ jobs:
3530
target_branch: gh-pages
3631
build_dir: dist
3732
env:
38-
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
33+
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}

.gitignore

Lines changed: 8 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -1,46 +1,11 @@
1-
# Logs
2-
logs
1+
node_modules/
2+
dist/
3+
.astro/
34
*.log
45
npm-debug.log*
5-
6-
# Runtime data
7-
pids
8-
*.pid
9-
*.seed
10-
11-
# Directory for instrumented libs generated by jscoverage/JSCover
12-
lib-cov
13-
14-
# Coverage directory used by tools like istanbul
15-
coverage
16-
17-
# nyc test coverage
18-
.nyc_output
19-
20-
# Grunt intermediate storage (http://gruntjs.com/creating-plugins#storing-task-files)
21-
.grunt
22-
23-
# node-waf configuration
24-
.lock-wscript
25-
26-
# Compiled binary addons (http://nodejs.org/api/addons.html)
27-
build/Release
28-
29-
# Dependency directories
30-
node_modules
31-
jspm_packages
32-
33-
# Optional npm cache directory
34-
.npm
35-
36-
# Optional REPL history
37-
.node_repl_history
38-
39-
.idea
40-
build-utilities/compiled
41-
dist/
42-
dev/
43-
lib/
44-
dist-doc/
6+
pnpm-debug.log*
7+
.env
8+
.env.production
459
.DS_Store
46-
10+
.idea/
11+
test-results/

.vscode/extensions.json

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
{
2+
"recommendations": ["astro-build.astro-vscode"],
3+
"unwantedRecommendations": []
4+
}

.vscode/launch.json

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
{
2+
"version": "0.2.0",
3+
"configurations": [
4+
{
5+
"command": "./node_modules/.bin/astro dev",
6+
"name": "Development server",
7+
"request": "launch",
8+
"type": "node-terminal"
9+
}
10+
]
11+
}

CLAUDE.md

Lines changed: 19 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ This file provides guidance to Claude Code (claude.ai/code) when working with co
44

55
## Project Overview
66

7-
This is the source code for [fullstackbulletin.com](https://fullstackbulletin.com), a static website for the FullStack Bulletin weekly newsletter. The site is built with Pug templates, SCSS, and Webpack, then deployed to GitHub Pages.
7+
This is the source code for [fullstackbulletin.com](https://fullstackbulletin.com), a static website for the FullStack Bulletin weekly newsletter. Built with Astro and Tailwind CSS, deployed to GitHub Pages.
88

99
## Common Commands
1010

@@ -16,29 +16,34 @@ pnpm install
1616
pnpm dev
1717

1818
# Production build (outputs to dist/)
19-
pnpm prod:build
19+
pnpm build
2020

21-
# Run tests
21+
# Preview production build
22+
pnpm preview
23+
24+
# Run Playwright tests
2225
pnpm test
2326
```
2427

2528
## Architecture
2629

2730
### Build System
31+
- **Framework**: Astro (static site generation)
32+
- **Styling**: Tailwind CSS v4
2833
- **Package Manager**: pnpm
29-
- **Templates**: Pug (`.pug` files in `views/`)
30-
- **Styles**: SCSS compiled with node-sass (ITCSS architecture in `assets/scss/`)
31-
- **JavaScript**: ES2015+ transpiled with Babel, bundled with Webpack
32-
- **Environment**: Uses `NODE_ENV` and `PACKAGE_OUTPUT` env vars to switch between dev/production
34+
- **Prebuild**: `generate-data-exports.mjs` and `generate-opml.mjs` generate data files
3335

3436
### Key Directories
35-
- `views/` - Pug templates; `index.pug` extends `_layout.pug`, components in `views/components/`
36-
- `assets/scss/` - ITCSS-organized styles (1-settings through 8-trumps)
37-
- `assets/scripts/` - JavaScript entry point at `main.js`
38-
- `settings/data.yml` - Site content data (newsletter config, sponsors, FAQ, founders)
39-
- `build-utilities/` - Build helper scripts (Babel src in `src/`, compiled to `lib/`)
40-
- `dist/` - Production output
41-
- `dev/` - Development output
37+
- `src/` — Astro source: pages, components, layouts, lib, data, styles
38+
- `src/content.config.ts` — Content collection config, loads `archive/*/metadata.json`
39+
- `public/` — Static assets (logos, icons, archive images)
40+
- `public/archive-images/` — Deduplicated images by SHA-256 hash (committed). Referenced from `metadata.json` as `./hash.ext`
41+
- `archive/` — Scraped newsletter data (committed). Each issue: `metadata.json` + `index.html`
42+
- `scripts/` — Utility scripts for scraping, metadata extraction, renaming, deduplication
43+
- `tests/` — Playwright accessibility tests
4244

4345
### Deployment
4446
GitHub Actions workflow (`.github/workflows/build.yml`) builds and deploys to `gh-pages` branch on push to `main`.
47+
48+
### Important Notes
49+
- `archive/` and `public/archive-images/` are committed to the repo (not gitignored)

README.md

Lines changed: 40 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,43 @@
11
# fullstackbulletin.com
22

3-
[![Build](https://github.com/FullStackBulletin/fullstackbulletin.com/actions/workflows/build.yml/badge.svg)](https://github.com/FullStackBulletin/fullstackbulletin.com/actions/workflows/build.yml)
3+
Static website for [FullStack Bulletin](https://fullstackbulletin.com), a weekly newsletter for full-stack developers. Built with [Astro](https://astro.build/) and [Tailwind CSS](https://tailwindcss.com/).
44

5-
The source code for [fullstackbulletin.com](https://fullstackbulletin.com) website.
5+
## Quick start
6+
7+
```bash
8+
pnpm install
9+
pnpm dev # Start dev server
10+
pnpm build # Production build (outputs to dist/)
11+
pnpm preview # Preview production build
12+
pnpm test # Run Playwright tests
13+
```
14+
15+
## Project structure
16+
17+
```
18+
├── archive/ # Scraped newsletter data (committed)
19+
├── public/archive-images/ # Deduplicated images by SHA-256 hash (committed)
20+
├── scripts/ # Utility scripts (scrape, extract, rename, deduplicate)
21+
├── src/ # Astro source (pages, components, layouts, lib)
22+
├── public/ # Static assets (logos, icons, archive images)
23+
├── tests/ # Playwright accessibility tests
24+
```
25+
26+
## Scripts
27+
28+
| Script | Description |
29+
|--------|-------------|
30+
| `scripts/scrape-archives.mjs` | Scrape newsletter archives from Buttondown |
31+
| `scripts/extract-metadata.mjs` | Extract structured metadata from scraped HTML |
32+
| `scripts/rename-archives.mjs` | Normalize archive folder names |
33+
| `scripts/deduplicate-images.mjs` | Deduplicate images by SHA-256 hash |
34+
| `scripts/fix-book-covers.mjs` | Fix missing book cover images |
35+
| `scripts/renumber-issues.mjs` | Renumber issue metadata |
36+
37+
## Deployment
38+
39+
GitHub Actions (`.github/workflows/build.yml`) builds and deploys to the `gh-pages` branch on push to `main`.
40+
41+
## License
42+
43+
[MIT](LICENSE)

0 commit comments

Comments
 (0)