Merge "user profile edition" code
![](https://makerlog-cdn.nyc3.digitaloceanspaces.com/task-attachments/clu4ghw6y8zvu0exm8jdt4qfg.png)
Moved from Mapbox to self-hosted PMTiles (Protomaps)
![](https://makerlog-cdn.nyc3.digitaloceanspaces.com/task-attachments/clsf5e7iw00mt1308exhxb4yy.png)
Implement the feedback form
Implement API routes mechanism
(This week) Setup email delivery mechanism
(This week) Implement CSRF mechanism
(Last week) Implement login / logout pages
(Last week) Setup analytics
(Last week) Implement logging and dashboards
Server: Speed up SSR rendering
Replace i18next with intl-messageformat:
- Complex page: 400ms to 300ms
Switch from React/Next to SolidJS/Vite:
- Complex page: 300ms to 50ms (1.1s to 260ms on an atom CPU)
- Simple page: 30ms to 8ms
Alternatives:
- Windowing: not an option, as I wanted all the data to be available at any given time for easier search/navigation
- Client-Side Rendering only: not an option, as I wanted to keep server-side generated html
- Basic templating (with caching) and simple js for client-side interactivity: could be interesting to explore this direction
- Complex page: 400ms to 300ms
Switch from React/Next to SolidJS/Vite:
- Complex page: 300ms to 50ms (1.1s to 260ms on an atom CPU)
- Simple page: 30ms to 8ms
Alternatives:
- Windowing: not an option, as I wanted all the data to be available at any given time for easier search/navigation
- Client-Side Rendering only: not an option, as I wanted to keep server-side generated html
- Basic templating (with caching) and simple js for client-side interactivity: could be interesting to explore this direction
Deploy: Speed up deploy process by switching to rsync / native Node.js / pm2
=> Managing deploys with rsync / native Node.js process makes the deploys faster (only a few KB to transfer instead of ~230MB for the podman image)
=> Using `next start` instead of Next.js `standalone` build allows for 15-30% performance boost (not sure why the Next.js `standalone` build mode has a slower runtime)
=> `pm2` is really nice to handle staging / prod services, and keep them running after a reboot
=> Using `next start` instead of Next.js `standalone` build allows for 15-30% performance boost (not sure why the Next.js `standalone` build mode has a slower runtime)
=> `pm2` is really nice to handle staging / prod services, and keep them running after a reboot
Server: Benchmarking the cause of slowness...
Results from running many wrk benchmarks:
~4-6% overhead from podman vs native Node.js process (probably due to running podman rootless, which might incur a small performance overhead (for networking?))
~15-30% overhead from Next.js `standalone` build vs `next start` 😱
~4-6% overhead from podman vs native Node.js process (probably due to running podman rootless, which might incur a small performance overhead (for networking?))
~15-30% overhead from Next.js `standalone` build vs `next start` 😱
Deploy: Setup a registry-less deploy process with podman
Basically:
podman build -t myapp-dev .
podman image scp myapp-dev my-server::
ssh dev@my-server 'podman stop myapp-dev; podman container rm myapp-dev; podman run -d -p 127.0.0.1:3000:3000 --name myapp-dev myapp-dev'
(then, serve it with an nginx reverse proxy)
podman build -t myapp-dev .
podman image scp myapp-dev my-server::
ssh dev@my-server 'podman stop myapp-dev; podman container rm myapp-dev; podman run -d -p 127.0.0.1:3000:3000 --name myapp-dev myapp-dev'
(then, serve it with an nginx reverse proxy)
Settled internationalization (-> switching back to one-language only for the first iteration)
Settled id & url formats (-> using a variation of SnowflakeID)
Sidebar listing visual improvement
![](https://makerlog-cdn.nyc3.digitaloceanspaces.com/task-attachments/clsf6w32f020c1308aass30g7.png)
Display difficulty rating as part of the marker's style
![](https://makerlog-cdn.nyc3.digitaloceanspaces.com/task-attachments/clsf6w681020h130819bx8g7h.png)
Quick markers style update
![](https://makerlog-cdn.nyc3.digitaloceanspaces.com/task-attachments/clsf6w7aw020i13080f8tgqap.png)
Display "already done" places in a different style
![](https://makerlog-cdn.nyc3.digitaloceanspaces.com/task-attachments/clsf6wezm020k13083l4wd34q.png)
Integrate per-user data for places
Move from mocks to basic data storage
Improve "Difficulty (votes)" badge
![](https://makerlog-cdn.nyc3.digitaloceanspaces.com/task-attachments/clsf6x8ne021a1308cheh387q.png)
Wire menu and transitions
![](https://makerlog-cdn.nyc3.digitaloceanspaces.com/task-attachments/clsf6xbs8021e1308fvmrgrpo.png)
Quick design iteration
![](https://makerlog-cdn.nyc3.digitaloceanspaces.com/task-attachments/clsf6xime021l1308f8io08im.png)
Iterate on Via Ferrata listing (wip)
![](https://makerlog-cdn.nyc3.digitaloceanspaces.com/task-attachments/clsf6xphn021q13081qqsd9zg.png)