Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
215 commits
Select commit Hold shift + click to select a range
a0d24aa
Events Table, Create/Edit Routes MVP (#1)
RileyChampion Jan 2, 2025
85ca5f9
Rename to lsd, cleanup
foltik Jan 2, 2025
9920a5e
Use release instead of prod profile
foltik Jan 2, 2025
5c29de5
more upgrades (#2)
foltik Jan 3, 2025
ae8506c
markdown post editor
foltik Jan 5, 2025
c6008bd
fix not logging full url
foltik Jan 5, 2025
e626e59
refactor data layer
foltik Jan 5, 2025
f8caac2
set server timezone to America/New_York
foltik Jan 5, 2025
92b5b44
use utc datetimes, add local tz config
foltik Jan 5, 2025
8452021
fix prod config.toml
foltik Jan 5, 2025
90419a3
update to axum 0.8
foltik Jan 6, 2025
e48a5ae
add smtp auth
foltik Jan 6, 2025
20cd8cd
add auth extractor
foltik Jan 6, 2025
bcd1c5e
add smtp credentials to deploy gha
foltik Jan 6, 2025
cb2afe6
add migrations table
foltik Jan 6, 2025
9ea78bb
add content_rendered to posts
foltik Jan 6, 2025
c39dbd1
add lists
foltik Jan 18, 2025
eec0dce
email tracking and post sending
foltik Jan 21, 2025
0b7f562
downgrade gha to ubuntu-22.04
foltik Jan 21, 2025
94a1e66
email unsubscribe links, markdown images with links, style tweaks
foltik Jan 21, 2025
f43cb73
style tweaks
foltik Jan 21, 2025
a3c5d8c
homepage tweaks
foltik Jan 21, 2025
2ec7166
tracking tweaks
foltik Jan 21, 2025
a222ab0
email ratelimit, skipping
foltik Jan 21, 2025
172641a
post: remove content_rendered
foltik Mar 4, 2025
1df5ab4
post-edit: validate title, url, author
foltik Mar 4, 2025
850b76b
add post list page
foltik Mar 10, 2025
908b057
post-edit: toggleable preview
foltik Mar 10, 2025
3d2bab7
post-edit: improved markdown tools
foltik Mar 10, 2025
4a88736
post-edit: ajax saving
foltik Mar 10, 2025
44fa49b
clippy
foltik Mar 10, 2025
d57591d
posts: WYSIWIG editor
foltik Mar 29, 2025
2e1777c
posts: errata
foltik Mar 29, 2025
edb48a4
Use built-in sqlx migration support instead of custom solution
swlody Mar 31, 2025
3a5d637
use sqlx macros for compile-time validity checks
swlody Mar 29, 2025
807586d
update readme
swlody Mar 31, 2025
7e5ff58
automate transition to new migrations method
swlody Mar 31, 2025
2cc4ad4
prepared SQLx to fix CI
swlody Mar 31, 2025
ecae655
Remove .env file from VC to force SQLx offline compilation
swlody Mar 31, 2025
99ddb48
Merge pull request #13 from swlody/sqlx_migrations
swlody Apr 1, 2025
e8a2dd9
fix date formatting (#14)
swlody Apr 1, 2025
3e6196c
more detailed logs (#16)
swlody Apr 3, 2025
ce8e7f8
basic database seeding functionality (#15)
swlody Apr 3, 2025
ad1a7ec
doc: Update README with sqlx instructions (#17)
hiamani Apr 3, 2025
3fe4829
checkin .env and enable SQLX_OFFLINE in CI (#18)
swlody Apr 3, 2025
df35e8b
Add TailwindCSS (#19)
hiamani Apr 4, 2025
b072566
Found a bug resetting up project with the dev.toml using seed_data.js…
RileyChampion Apr 4, 2025
f0ba6fc
add prettier formatting and consolidate frontend resources (#21)
swlody Apr 5, 2025
e032a59
random tweaks
foltik Apr 5, 2025
e883361
fix prettier actions
foltik Apr 5, 2025
eb969bb
Use node in GHA
foltik Apr 5, 2025
ed50a9a
editor: sticky toolbar
foltik Apr 7, 2025
53d2319
editor: disable formatting on paste
foltik Apr 7, 2025
e1aa147
editor: save local changes in localStorage
foltik Apr 7, 2025
f700c5f
posts: rename routes
foltik Apr 7, 2025
f5977dd
migrate templating engine to askama (#22)
swlody Apr 8, 2025
b7f3e1c
enable deploy on workflow dispatch
foltik Apr 8, 2025
aa8df98
convert templating engine to askama take 2 (#26)
swlody Apr 8, 2025
53fd908
Fix for error in cross test when installing arch-linux (#31)
RileyChampion Apr 10, 2025
290e48a
Bug/fix cross compile apt install error (#32)
RileyChampion Apr 10, 2025
d33657e
error pages (#27)
swlody Apr 11, 2025
469f051
temp: fix broken 'View this post on the web' links in posts/email.html
foltik Apr 16, 2025
10e388e
Fix broken email.html styles
foltik Apr 16, 2025
4031e0e
More logging in email send route
foltik Apr 16, 2025
f4e4ee6
Unsubscribe via POST request
foltik Apr 16, 2025
a127b5a
Fix email.html post URL
foltik Apr 16, 2025
b7e1a3f
Make User first_name and last_name nullable
foltik Apr 16, 2025
2b0bf04
Add list signup form
foltik Apr 17, 2025
4742062
Fix list edit JOIN
foltik Apr 17, 2025
2643847
Fix sqlx
foltik Apr 17, 2025
c3dbd18
Actually run migrations
swlody Apr 17, 2025
a4ba2df
?
swlody Apr 17, 2025
1f211e9
await
swlody Apr 17, 2025
e223997
Refactor Styles (#30)
hiamani Apr 26, 2025
bf28fdc
feat: posts/send styles
hiamani Apr 26, 2025
47a69ff
Better confirmation page
foltik Apr 26, 2025
3ace71a
Simplify routing, views, imports
foltik Apr 27, 2025
086588e
Fix unsubscribe button
foltik Apr 27, 2025
56e8322
fix: Actually confirm post delete button
hiamani Apr 27, 2025
671f808
Add reply_to email config option
foltik May 1, 2025
634bdfa
Misc cleanup
foltik May 3, 2025
4a2c396
Improved email sending progress UX
foltik May 29, 2025
cb86f1d
Add query string to bust css cache
foltik May 29, 2025
421d7f2
feat: Add Ctrl/Cmd + i/b/u shortcuts to posts editor
hiamani May 8, 2025
14e0917
chore: Formatting
hiamani May 9, 2025
83071a4
Simplify email sending code
foltik May 29, 2025
01c03c6
auth tweaks
swlody Jun 9, 2025
8e1e9f6
address feedback
swlody Jun 12, 2025
496d085
nits
foltik Jun 12, 2025
ae61f74
seed db with a test cookie
swlody Jun 13, 2025
e8ad40f
run sqlx prepare
swlody Jun 13, 2025
cd02b7c
move bulk subscribe form above member list
foltik Aug 16, 2025
a6aebe3
clippy
foltik Aug 16, 2025
378d3b8
nicer list member styling
foltik Aug 16, 2025
de42b5f
Ticketing: checkout flow MVP (#46)
foltik Oct 1, 2025
c166ab8
bump main.css version
foltik Oct 1, 2025
3a7284e
Ticketing: is_me, JSON bugfixes
foltik Oct 1, 2025
f3415c4
gha: add stripe env
foltik Oct 1, 2025
3ca7ed5
events: flyer uploads, progressive jpeg transcoding
foltik Oct 2, 2025
93fe47b
events: flyer migrations
foltik Oct 2, 2025
106946a
css tweaks
foltik Oct 2, 2025
b9738ec
simple contact form (#62)
swlody Oct 3, 2025
c7d9c36
temporarily error to debug message failure (#63)
swlody Oct 3, 2025
42a5349
correct reply-to on sender form (#64)
swlody Oct 3, 2025
bf670cd
copy editing (#65)
swlody Oct 3, 2025
915f4ed
send mail to "studio@lightandsound.design" instead of beta (#66)
swlody Oct 3, 2025
880844c
perf: enable http2 and brotli compression
foltik Oct 3, 2025
7caf98d
perf: embed static assets, css content hashing
foltik Oct 3, 2025
cd131e4
fix: build with SQLX_OFFLINE
foltik Oct 3, 2025
8d11838
css: style suggestion box, only show on homepage
foltik Oct 3, 2025
398ce76
perf: universal hashing pass
foltik Oct 4, 2025
73d183b
fix: working livereload
foltik Oct 3, 2025
a3f8fab
fit contact form to screen height and move link to header ? (#72)
swlody Oct 4, 2025
d68a3a1
nav: pipe Option<User> to layout.html
foltik Oct 4, 2025
ba0a577
css: fix events divider padding
foltik Oct 4, 2025
3cc0e41
nav: style tweaks, role-based icons
foltik Oct 5, 2025
c3bcc76
css: standardize page layout
foltik Oct 5, 2025
07df0fb
auth: 400 on bad register token
foltik Oct 5, 2025
ff7b37c
editor: fix hotkeys
foltik Oct 5, 2025
5a6df07
checkout: nav btns, save session in localStorage
foltik Oct 6, 2025
76b278b
checkout: basic double RSVP prevention
foltik Oct 6, 2025
9f9ffea
checkout: handle zero total
foltik Oct 6, 2025
8a584b9
checkout: session expiry
foltik Jan 18, 2025
c665dfe
checkout: expiry 1min -> 5min
foltik Oct 6, 2025
fecfc56
header link to live site (#78)
swlody Oct 6, 2025
26093a2
email: configurable contact_to, move addresses to GHA secrets
foltik Oct 6, 2025
21503eb
infra: pre-deploy backups and automated rollback
foltik Oct 6, 2025
7d1dc8b
infra: flush WAL before backup/restore
foltik Oct 7, 2025
56b4d74
infra: new WAL flush method, backup pre-rollback, set -euxo
foltik Oct 7, 2025
6f01208
checkout: add index and fk cascade for rsvps.session_id
foltik Oct 6, 2025
2b44ad1
events: guest lists
foltik Oct 7, 2025
c2f4c8d
lists: improve styling
foltik Oct 7, 2025
766d7d0
infra: sleep before systemd liveness checks
foltik Oct 7, 2025
46693cf
events: add missing migrations
foltik Oct 7, 2025
b03331c
infra: clear systemctl StartLimit before rollback restart
foltik Oct 7, 2025
95ccdf7
testing: BOOM!
foltik Oct 7, 2025
41d65b3
Revert "testing: BOOM!"
foltik Oct 7, 2025
3b14a64
perf: inline image thumbnails, preload, caching, fix layout shift
foltik Oct 7, 2025
9cef5eb
perf: image priority, preload before stylesheet
foltik Oct 7, 2025
bfe18bd
sec: cloudflare turnstile verification (#96)
swlody Oct 18, 2025
6343c01
avoid overscroll in main (#97)
swlody Oct 18, 2025
c1de4c8
style: persist newsletter animation state
foltik Oct 20, 2025
e9d33c7
style: persist newsletter animation state hotfix
foltik Oct 20, 2025
5545e3b
js: listen to visibilitychange instead of beforeunload
foltik Oct 21, 2025
6f1cc02
email: support resending
foltik Nov 16, 2025
eb021fd
email: blue link underline
foltik Nov 16, 2025
f986d82
posts: alert() on error
foltik Nov 18, 2025
4ff41d4
events: style tweaks
foltik Nov 16, 2025
9894378
auth: rework users and rsvp flow
foltik Nov 22, 2025
48075bd
rsvp: BIG STYLE
foltik Dec 8, 2025
22449e9
rsvp: backend rework
foltik Dec 8, 2025
febc7a8
rsvp: backend rework finished
foltik Dec 9, 2025
ced1058
rsvp: style tweaks
foltik Dec 9, 2025
45748a7
rsvp: more style tweaks
foltik Dec 9, 2025
191311c
lists: fix insert
foltik Dec 10, 2025
ed7ce05
lists: add sqlx query
foltik Dec 10, 2025
43d6a88
add sentry
foltik Dec 10, 2025
fb362dd
sentry: don't report AppErrors, clippy
foltik Dec 10, 2025
55ab8e8
posts: save fixes
foltik Dec 12, 2025
3ae124a
newsletter: better confirmation/error pages
foltik Dec 12, 2025
15357e2
editor: fix bugs
foltik Dec 13, 2025
5ca488d
rsvp: invite, confirmation, day-of emails, attendees
foltik Dec 17, 2025
038f024
login: nicer confirmation, fix duplicate tokens
foltik Dec 17, 2025
db58142
rsvp: hella stuff
foltik Dec 18, 2025
d423939
rsvp: better validation
foltik Dec 20, 2025
99b1995
rsvp: fix updateIsMe
foltik Dec 23, 2025
f2a5a94
home: basic dashboard via long pressing logo
foltik Dec 23, 2025
bdd7b09
auth: redirect to /login on unauthorized, support redirect
foltik Dec 23, 2025
7d7d3c4
events: better labels on /edit
foltik Dec 23, 2025
69956e4
rsvp: better form validation
foltik Dec 23, 2025
7cd6bcd
events: better style without desc/flyer
foltik Dec 23, 2025
b1ff9d3
events: add at capacity error
foltik Dec 23, 2025
bc93f45
rsvp: remove delete in manage page
foltik Dec 23, 2025
89bf9e9
rsvp: fix work trade, processing indicator
foltik Dec 23, 2025
c72e261
events: show token in sessions debug
foltik Dec 23, 2025
303c8f3
home: link to main site
foltik Dec 23, 2025
b501c04
rsvp: proper email sent_at/error_at, user version max
foltik Dec 23, 2025
933ab88
rsvp: proper email sent_at/error_at in webhook
foltik Dec 23, 2025
0ed33e5
rsvp: fix duplicate line items
foltik Dec 23, 2025
337c064
dashboard: add Lists
foltik Dec 23, 2025
4baa476
newsletter: fix response parsing
foltik Jan 7, 2026
c42698f
newsletter: fix duplicate id in form submission
foltik Jan 7, 2026
94e3967
/sublet
foltik Jan 11, 2026
f7ac1e7
serve /static
foltik Jan 11, 2026
8f78fe6
/sublet: pricing
foltik Jan 11, 2026
ec72136
events: split RSVP counts to show cart vs confirmed
foltik Jan 17, 2026
8b00927
emails: add flyer image and fix date/time spacing
foltik Jan 17, 2026
1497141
events: add delete and duplicate functionality
foltik Jan 17, 2026
0a22848
admin: add/delete attendees manually
foltik Jan 17, 2026
f27fd6f
attendees: mobile-friendly table
foltik Jan 17, 2026
f096220
lists: ignore duplicates, better errors
foltik Jan 18, 2026
049fe55
clippy
foltik Jan 18, 2026
c94a56e
remove ?email= from /rsvp with guestlist
foltik Jan 28, 2026
62b60a8
confirmation wording, attendees sort order
foltik Jan 29, 2026
6b9f51e
rsvp state transition logging
foltik Feb 24, 2026
b867d5c
events: slug validation
foltik Feb 24, 2026
fc22ed5
events: add rsvps, contributions to list page
foltik Feb 24, 2026
5dbdf68
events: add rsvps, contributions to attendees page
foltik Feb 24, 2026
cf63c94
rsvp: add capacity to events/attendees
foltik Feb 24, 2026
8864fdb
add line tables to release builds
foltik Feb 24, 2026
bda1157
case insensitive email comparison
sln-jack Feb 28, 2026
8be68b8
improved cf turnstile logging
sln-jack Mar 11, 2026
b7d2d3f
events: simplify json parse in error enums
sln-jack Mar 11, 2026
8ae98f7
errors: add into for bail!
sln-jack Mar 11, 2026
fe15290
events: fix slug validation
sln-jack Mar 11, 2026
64d4cc1
wip
swlody Jun 19, 2025
c885dec
more wip
swlody Aug 9, 2025
d162d89
add + button
swlody Aug 9, 2025
213a0bf
more wip
swlody Aug 22, 2025
de81f28
most wip
swlody Aug 26, 2025
d74b099
remove unnecessary realloc of flyers vec
swlody Aug 26, 2025
168c18a
cleanup
swlody Aug 27, 2025
435f8e1
touchups
swlody Mar 25, 2026
0346860
remove dates
swlody Mar 25, 2026
5435294
pin style
swlody Mar 25, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
1 change: 1 addition & 0 deletions .env
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
DATABASE_URL=sqlite://db.sqlite
60 changes: 51 additions & 9 deletions .github/workflows/deploy.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -2,11 +2,12 @@ name: Deploy
on:
push:
branches: [main]
workflow_dispatch: {}

jobs:
deploy:
name: Deploy
runs-on: ubuntu-latest
runs-on: ubuntu-22.04
permissions:
contents: read
steps:
Expand All @@ -16,14 +17,55 @@ jobs:
targets: aarch64-unknown-linux-gnu
- uses: Swatinem/rust-cache@v2
- name: install gcc-aarch64-linux-gnu
run: sudo apt install -y gcc-aarch64-linux-gnu
- uses: webfactory/ssh-agent@v0.9.0
run: sudo apt update && sudo apt install -y gcc-aarch64-linux-gnu

- uses: actions/setup-node@v4
with:
ssh-private-key: ${{ secrets.SSH_KEY }}
- name: ssh-keyscan
node-version: 23
- run: npm ci
- run: npm run build:styles.min

- name: Setup SSH key
run: |
mkdir -p ~/.ssh
ssh-keyscan wlsd.lightandsound.design > ~/.ssh/known_hosts
mkdir ~/.ssh
chmod 700 ~/.ssh
echo "${{ secrets.ROOT_SSH_PRIVKEY }}" > ~/.ssh/id_ed25519
chmod 600 ~/.ssh/id_ed25519
ssh-keyscan beta.lightandsound.design > ~/.ssh/known_hosts
chmod 600 ~/.ssh/known_hosts
- name: deploy
run: scripts/deploy.sh ec2-user@wlsd.lightandsound.design

- name: Generate config
run: |
envsubst < config/prod.toml > config/prod.toml.subst
mv config/prod.toml.subst config/prod.toml
env:
SMTP_USERNAME: ${{ secrets.SMTP_USERNAME }}
SMTP_PASSWORD: ${{ secrets.SMTP_PASSWORD }}
STRIPE_SECRET_KEY: ${{ secrets.STRIPE_SECRET_KEY }}
STRIPE_PUBLISHABLE_KEY: ${{ secrets.STRIPE_PUBLISHABLE_KEY }}
STRIPE_WEBHOOK_KEY: ${{ secrets.STRIPE_WEBHOOK_KEY }}
EMAIL_FROM: ${{ secrets.EMAIL_FROM }}
EMAIL_CONTACT_TO: ${{ secrets.EMAIL_CONTACT_TO }}
EMAIL_NEWSLETTER_REPLY_TO: ${{ secrets.EMAIL_NEWSLETTER_REPLY_TO }}
CF_TURNSTILE_SITE_KEY: ${{ secrets.CF_TURNSTILE_SITE_KEY }}
CF_TURNSTILE_SECRET_KEY: ${{ secrets.CF_TURNSTILE_SECRET_KEY }}
SENTRY_DSN: ${{ secrets.SENTRY_DSN }}

- name: Generate content hashes
run: |
set -euo pipefail
find frontend/templates -type f -exec perl -i -pe \
's|(/[^?"]+)\?version=CONTENT_HASH|my $hash=`md5sum ./frontend/$1 \| cut -d" " -f1`; chomp($hash); "$1?version=$hash"|ge' {} \;

- name: Cross compile
run: cargo build --release --target aarch64-unknown-linux-gnu
env:
SQLX_OFFLINE: true

- name: Deploy
id: deploy
run: scripts/deploy.sh ec2-user@beta.lightandsound.design

- name: Rollback on failure
if: ${{ failure() && steps.deploy.conclusion == 'failure' }}
run: scripts/rollback.sh ec2-user@beta.lightandsound.design
21 changes: 21 additions & 0 deletions .github/workflows/rollback.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
name: Rollback
on:
workflow_dispatch: {}

jobs:
rollback:
runs-on: ubuntu-22.04
steps:
- uses: actions/checkout@v4

- name: Setup SSH key
run: |
mkdir -p ~/.ssh
chmod 700 ~/.ssh
echo "${{ secrets.ROOT_SSH_PRIVKEY }}" > ~/.ssh/id_ed25519
chmod 600 ~/.ssh/id_ed25519
ssh-keyscan beta.lightandsound.design > ~/.ssh/known_hosts
chmod 600 ~/.ssh/known_hosts

- name: Rollback
run: scripts/rollback.sh ec2-user@beta.lightandsound.design
35 changes: 28 additions & 7 deletions .github/workflows/test.yaml
Original file line number Diff line number Diff line change
@@ -1,15 +1,15 @@
name: Test
on:
pull_request:
push:
branches: ["*"]

jobs:
test:
name: Test
runs-on: ubuntu-latest
runs-on: ubuntu-22.04
permissions:
contents: read
env:
SQLX_OFFLINE: true
steps:
- uses: actions/checkout@v4
- uses: dtolnay/rust-toolchain@stable
Expand All @@ -18,36 +18,57 @@ jobs:

rustfmt:
name: Format
runs-on: ubuntu-latest
runs-on: ubuntu-22.04
permissions:
contents: read
env:
SQLX_OFFLINE: true
steps:
- uses: actions/checkout@v4
- uses: dtolnay/rust-toolchain@stable
with:
components: rustfmt
- run: cargo fmt --check

prettier:
name: Format frontend
runs-on: ubuntu-22.04
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version: 23
- run: npm ci
- run: npm run format:check

clippy:
name: Lint
runs-on: ubuntu-latest
runs-on: ubuntu-22.04
permissions:
contents: read
env:
SQLX_OFFLINE: true
steps:
- uses: actions/checkout@v4
- uses: dtolnay/rust-toolchain@stable
with:
components: clippy
- uses: Swatinem/rust-cache@v2
- run: cargo clippy -- -D warnings

cross:
name: Cross-compile
runs-on: ubuntu-latest
runs-on: ubuntu-22.04
permissions:
contents: read
env:
SQLX_OFFLINE: true
steps:
- uses: actions/checkout@v4
- uses: dtolnay/rust-toolchain@stable
with:
targets: aarch64-unknown-linux-gnu
- uses: Swatinem/rust-cache@v2
- name: install gcc-aarch64-linux-gnu
run: sudo apt install -y gcc-aarch64-linux-gnu
run: sudo apt update && sudo apt install -y gcc-aarch64-linux-gnu
- run: cargo build --target aarch64-unknown-linux-gnu
14 changes: 13 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
@@ -1,4 +1,16 @@
/target
config/*
!config/prod.toml
!config/dev.toml
!config/seed_data.sql
frontend/static/main.css

Cargo.lock
target/
*.sqlite
*.sqlite-*
.DS_Store
deno.lock
node_modules/
venv/
worktree/
.env.local
1 change: 1 addition & 0 deletions .prettierignore
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
frontend/templates/emails/

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Loading
Loading