Skip to content

Commit 1b15d4d

Browse files
r8a5claude
andcommitted
Polish repo for public release — README, .github, npm scripts
- README: hero, badges, demo link, one-click deploy, screenshots, Content Calendar section, FAQ, contributing pointer. - .github: issue templates (bug, feature) with provider dropdown, PR template with migration callout, CONTRIBUTING with house rules, SECURITY policy, FUNDING, CodeQL workflow. - package.json: real metadata + author + repo, npm run setup wired to bash setup.sh, db:migrate fixed to use the actual db name. - .gitignore: cover editor / IDE noise + soro-example.js scratch. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
1 parent aa42b4d commit 1b15d4d

11 files changed

Lines changed: 421 additions & 56 deletions

File tree

.github/CONTRIBUTING.md

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
# Contributing to pages-seo
2+
3+
PRs and issues welcome. The codebase is small and entirely framework-free JavaScript — no React, no build step, no transpiler — so the barrier to a useful patch is low.
4+
5+
## Quick rules
6+
7+
1. **No build step.** Everything in `functions/` and `public/` is read by Cloudflare Pages as-is. No bundlers, no preprocessors, no transpilers.
8+
2. **No frameworks in the admin SPA.** Vanilla JS only. The dashboard is ~2k lines and that's deliberate — it stays readable for ops people.
9+
3. **D1 changes go in `schema/init.sql`.** If you add a table or index, append it to that file and mention it in the PR description so existing operators know to run the migration.
10+
4. **Don't add new dependencies casually.** `package.json` has zero runtime deps — let's keep it that way unless there's a really good reason.
11+
12+
## Local dev
13+
14+
```bash
15+
git clone https://github.com/Benjamin-Bloch/pages-seo
16+
cd pages-seo
17+
npm install -g wrangler && wrangler login
18+
bash setup.sh # one-time provisioning
19+
npm run dev # local Pages Functions runtime
20+
```
21+
22+
`wrangler dev` proxies your real D1/R2/AI bindings into the local runtime, so you can iterate without redeploying.
23+
24+
## Filing a good issue
25+
26+
- **Bug?** Use the bug template. Include the commit SHA (footer of `/admin`) and any relevant log output.
27+
- **Feature?** Use the feature template. Lead with the problem, not the solution.
28+
29+
## Style
30+
31+
- Comments are for the **why**, not the what. The code already tells you what.
32+
- One change per PR. Easier to review, easier to revert.
33+
- Tabs vs spaces: spaces, two of them.
34+
35+
## Things I'd love help with
36+
37+
- Wider AI-provider coverage (Vertex, Bedrock, Inflection, Perplexity).
38+
- Better i18n hooks (the prompts are English-only right now).
39+
- A Webflow / Wix install guide for non-technical operators.
40+
41+
Thanks for being here.

.github/FUNDING.yml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
# If pages-seo saves you time and you want to say thanks.
2+
github: [Benjamin-Bloch]

.github/ISSUE_TEMPLATE/bug.yml

Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,58 @@
1+
name: 🐛 Bug report
2+
description: Something is broken or behaving unexpectedly.
3+
labels: [bug]
4+
body:
5+
- type: markdown
6+
attributes:
7+
value: |
8+
Thanks for taking the time to file a bug report. The more specific you can be, the faster it gets fixed.
9+
- type: textarea
10+
id: what
11+
attributes:
12+
label: What's happening
13+
description: A clear description of the behaviour you're seeing.
14+
placeholder: When I click X, the dashboard shows Y instead of Z.
15+
validations:
16+
required: true
17+
- type: textarea
18+
id: expected
19+
attributes:
20+
label: What you expected to happen
21+
validations:
22+
required: true
23+
- type: textarea
24+
id: repro
25+
attributes:
26+
label: Steps to reproduce
27+
placeholder: |
28+
1. Go to /admin
29+
2. Click …
30+
3. See the error
31+
validations:
32+
required: true
33+
- type: input
34+
id: version
35+
attributes:
36+
label: Commit SHA or version
37+
description: From the footer of /admin, or `git rev-parse HEAD`.
38+
- type: dropdown
39+
id: provider
40+
attributes:
41+
label: AI provider in use
42+
options:
43+
- Workers AI (default)
44+
- OpenAI
45+
- Anthropic
46+
- Gemini
47+
- Groq
48+
- DeepSeek
49+
- Mistral
50+
- Together
51+
- Cerebras
52+
- Other / multiple
53+
- type: textarea
54+
id: logs
55+
attributes:
56+
label: Logs / error output
57+
description: Wrangler tail output, browser console, or D1 query results. Redact any tokens or keys.
58+
render: shell

.github/ISSUE_TEMPLATE/config.yml

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
blank_issues_enabled: false
2+
contact_links:
3+
- name: 💬 Question / discussion
4+
url: https://github.com/Benjamin-Bloch/pages-seo/discussions
5+
about: Ask a question or share how you're using pages-seo.
6+
- name: 🌐 Live demo
7+
url: https://seo.benjaminb.xyz
8+
about: See an instance of pages-seo running on its own daily cron.

.github/ISSUE_TEMPLATE/feature.yml

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
name: ✨ Feature request
2+
description: Suggest an enhancement.
3+
labels: [enhancement]
4+
body:
5+
- type: textarea
6+
id: problem
7+
attributes:
8+
label: What problem does this solve?
9+
description: Describe the use case. Don't worry about the solution yet.
10+
validations:
11+
required: true
12+
- type: textarea
13+
id: solution
14+
attributes:
15+
label: Proposed solution
16+
description: What would you like to see? Sketches, API shapes, and analogies all welcome.
17+
- type: textarea
18+
id: alternatives
19+
attributes:
20+
label: Alternatives you've considered

.github/PULL_REQUEST_TEMPLATE.md

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
<!--
2+
Thanks for the PR! A couple of quick checks save reviewer time:
3+
4+
1. Does it touch the public API surface (functions/api/**)? Note any
5+
breaking changes here.
6+
2. Does it need a D1 migration? Add the SQL to schema/init.sql and
7+
call it out below — operators on existing instances will need to
8+
run it.
9+
3. Is the codebase still build-step-free? No new transpilers, bundlers,
10+
or React/Vue components, please.
11+
-->
12+
13+
## What this changes
14+
15+
<!-- One paragraph. The "why" matters more than the "what" — the diff
16+
shows the what. -->
17+
18+
## How I tested it
19+
20+
<!-- Manual steps, screenshots, or "npm run dev" results. Doesn't have to be
21+
exhaustive — just enough that a reviewer trusts the change works. -->
22+
23+
## Migration notes / breaking changes
24+
25+
<!-- Delete if none. Otherwise: what existing installs need to do. -->
26+
27+
---

.github/SECURITY.md

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
# Security policy
2+
3+
## Reporting a vulnerability
4+
5+
Please **don't open a public issue** for security problems.
6+
7+
Email me directly at **security@benjaminb.xyz** with:
8+
9+
- A description of the issue.
10+
- Steps to reproduce, or a proof-of-concept.
11+
- Your name / handle if you'd like credit.
12+
13+
You'll get an acknowledgement within 72 hours and, where applicable, a fix on the main branch within two weeks. Disclosure timing is flexible — I'd rather get the fix right than rush a public note.
14+
15+
## Scope
16+
17+
In scope:
18+
- Anything in `functions/` (the Pages Functions runtime).
19+
- The admin SPA in `public/admin.*`.
20+
- The cron Worker in `cron-worker/`.
21+
- The setup scripts (`setup.sh`, `setup.py`, `setup.js`).
22+
23+
Out of scope:
24+
- Issues that require a malicious operator (this is a self-hosted tool — the operator is trusted).
25+
- Cloudflare platform issues (report those to Cloudflare).
26+
- Dependency-only issues already triaged upstream.

.github/workflows/codeql.yml

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
name: CodeQL
2+
3+
on:
4+
push:
5+
branches: [main]
6+
pull_request:
7+
branches: [main]
8+
schedule:
9+
- cron: '23 4 * * 1'
10+
11+
jobs:
12+
analyze:
13+
name: Analyze JavaScript
14+
runs-on: ubuntu-latest
15+
permissions:
16+
security-events: write
17+
actions: read
18+
contents: read
19+
steps:
20+
- uses: actions/checkout@v4
21+
- uses: github/codeql-action/init@v3
22+
with:
23+
languages: javascript
24+
- uses: github/codeql-action/analyze@v3

.gitignore

Lines changed: 18 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,23 @@
1+
# Secrets — never commit a filled-in env.
12
.env
23
.env.*
34
!.env.example
4-
node_modules
5-
.wrangler
6-
.DS_Store
7-
*.log
85
.dev.vars
9-
__pycache__/
6+
7+
# Setup script state machine. Generated locally; delete to start over.
108
.setup-state
9+
10+
# Local-only reference scratch files (e.g. soro-example.js used while
11+
# building the embed widget; not part of the project).
12+
soro-example.js
13+
14+
# Tool caches.
15+
node_modules/
16+
.wrangler/
17+
__pycache__/
18+
19+
# Editor / OS noise.
20+
.DS_Store
21+
*.log
22+
.idea/
23+
.vscode/

0 commit comments

Comments
 (0)