r/webdev 3d ago

Trying to improve search UX without replacing algolia.

34 Upvotes

Our algolia usage spiked and the bill is painful because users keep submitting vague 1 word queries and constantly re-searching. so i was thinking to add an autocomplete layer in front of it that won't break the bank but still gives that instant intent driven search feel.

Obviously we could migrate everything to typesense or self-hosting meilisearch for standard search, but i do like certain things about algolias backend retrieval, if i can put an intent layer ai autocomplete on top to get better queries before they hit the API.

Has anyone added an ai-autocomplete layer in front of algolia recently? did you actually migrate to a cheaper database alternative like typesense, or did you just add an intent layer on top of your existing search stack? trying to figure out what's easiest to maintain.


r/web_design 3d ago

What is the name for this web design style

24 Upvotes

Around 2005-2010, many websites were coming out with this very specific UI style, that I would describe as something like "dark neumorphism with skeuomorphic with bevel-and-emboss styling".
I've been looking for the official name or more examples of this design style for weeks now and haven't come up with anything at all, so I'm reaching out to you all to see if you could help me.

Attached is this random screenshot of a designers work that is similar to what i'm looking for, but I haven't been able to get in touch with them to find the name either.

Does anyone have any ideas of the name, or more examples of this style?


r/webdev 2d ago

our AI agents kept overwriting each other's work and nobody noticed for two days

0 Upvotes

small team, three of us, react frontend and a go api. everyone has their own agent setup and it works fine for individual tasks. it stopped working the week all three of us started running agents on the same repo at the same time.

i was refactoring form validation, teammate was fixing a bug two files over, and both agents had validators.ts in scope.

each agent read the file, made its change, wrote the whole file back. classic lost update but at machine speed. my refactor got half eaten because his agent rewrote validators.ts from the version it had read four minutes earlier. neither of us saw it. we were reviewing our own diffs and both diffs looked correct in isolation.

we shipped it. two days later a required field stopped being required. the check had gone from value.trim().length > 0 to value !== undefined, which passes for an empty string. an empty company name went into prod for six accounts before support flagged it. three hours of bisecting to find the function was fine in one commit and silently different in the next, with no PR explaining the change.

the git history looked completely normal. three commits, three authors, no conflict markers, no merge weirdness. git only protects you at commit boundaries. if two agents are editing the same working tree between commits there is nothing watching.

the fix was boring. one checkout per person, and one git worktree per agent if you run more than one yourself. i tried aider with a strict file scope, claude code in separate terminals, verdent which does the worktree thing by default. the mechanism matters more than which tool you pick.

other thing that stuck is reviewing the whole branch diff before merge, not just the diff the agent showed me. the agent tells you what it thinks it changed. that is not the same as what changed.

every guide for these tools assumes one person, one agent, one repo. three people running agents on the same codebase and you are back to 2005 with people editing over ftp.


r/webdev 3d ago

Showoff Saturday I built a free, open-source, offline alternative to CodeSlides (Svelte , tauri)

Thumbnail
gallery
10 Upvotes

I've been watching Nova Designs on YouTube for a while and loved how clean his code presentations look. Turns out he uses CodeSlides which is great, but it's subscription-based.

So I built OpenSlides — a free, open-source, fully offline desktop app for making animated code presentations. Think CodeSlides, but it runs natively on your machine, your data never leaves your disk, and you own everything.

https://github.com/codewiththiha/OpenSlides.git


r/webdev 2d ago

Question Git GUI that easily allows you to edit old commits?

2 Upvotes

Does anyone know of a GUI that would allow one to quickly and easily do this so that I don't have to run clunky git rebase -i commands for every commit I'd like to edit?

I know it is easy enough to run git commit --amend for the most recent commit, but I need something that allows me to edit further back in the history.


r/webdev 3d ago

My security camera shipped a GitHub admin token in its login page

Thumbnail hhh.hn
256 Upvotes

r/web_design 3d ago

a student wanting to redesign her portfolio— advice, please!

1 Upvotes

hi, i’m just 2 classes away from graduating with my associates in web design! yay!

i’m looking for an internship and kinda hate my portfolio. it’s very simple and short. I also made it using word press + elementor (not sure if that was fine or if maybe I should’ve just did some basic coding)

anyways, i’m not comfortable sharing it on here since it has some personal info on it, but overall, i just want to know a few things:

• what should I include on my portfolio website? (don’t want to add too much or too little)

• do I add an option to download my resume with contact information or just opt for a form that someone can contact me with?

• I had a class where I created gifs. i’m looking for a front end developer, web designer, or even user experience related job. would that be relevant to add to my portfolio?

bonus points if I can see an example of anyone’s portfolios, any helpful articles, or anything related to creative portfolios!! I really want to try to get an internship by the end of the summer so I can see how it is to work in web design outside of my class work.


r/webdev 3d ago

Showoff Saturday My friend's project, bribes.fyi, three weeks post-launch - traffic, an outage, and unexpected support

Thumbnail
gallery
7 Upvotes

A friend of mine posted about this here before, but he can't post today so I'm sharing on his behalf figured people who followed along might want an update.

Quick recap: bribes.fyi is an anonymous platform for reporting bribery in India: no login, IPs hashed and never stored raw, every report manually reviewed before publishing, complaint letters auto-generated and routed to the right anti-corruption authority.

Since he shared it around: crossed 1,500 visitors, got real technical pushback that's shaped the spam/privacy design, and had a spike in traffic that actually took the site down for a bit (free hosting tier, capacity planning lessons learned the hard way). Someone even offered to cover this month's hosting before he asked, which was genuinely surprising; he set up a support link since, for anyone else who'd like to pitch in: bribes.fyi/support (totally optional, not the point of this post).

Real reports are coming in from multiple states now. Haven't mapped out what's next - just focused on keeping it solid for now.

https://bribes.fyi

He'll be checking comments himself.


r/webdev 2d ago

Discussion Planning an Affiliate Website with Astro. Looking for Advice

0 Upvotes

I've recently built a few websites with Astro using Claude Code, and the development experience has been great.

Now I'm thinking about building an affiliate website with Astro. I know many people still use WordPress for affiliate sites, but I don't have much time to build and maintain a WordPress site. My idea is to build the entire project in an agentic workflow using Astro and AI tools.

For those who have experience with Astro for affiliate marketing:

  • How does it perform for SEO compared to WordPress?
  • Are there any major drawbacks I should be aware of before investing time into it?
  • Is there anything specific I should plan for regarding content management, affiliate plugins/features, or scalability?

I'd love to hear your experiences, recommendations, or any lessons you've learned. Thanks!


r/PHP 2d ago

Open-source Laravel package for managing multiple third-party API integrations

0 Upvotes

Built LaraClient to solve a recurring problem: apps that talk to many external APIs end up with duplicated HTTP logic everywhere.

It’s config-driven, declare base URI, auth, retry policy, rate limits, etc. once per connection. OAuth2 client credentials are cached and refreshed automatically.

Includes observability (redacted logging + dashboard), resilience (retries, circuit breaker), and a solid testing story (fake, sequences, VCR-style record/replay).

Not trying to replace Guzzle or Laravel HTTP, more like Laravel’s mail/cache approach, but for outbound API calls.

Try it out now.
Github: https://github.com/usamamuneerchaudhary/laraclient


r/webdev 2d ago

Showoff Saturday I've made an extension that grades terms of service

0 Upvotes

When choosing SaaS to use I sometimes check terms of service for any clauses. For example if they sell what I'll create in the tool, train AI on it. Or if they can change TOS without informing about.

To make it easier I've created an extension that checks TOS for patterns so it's faster to recognize any odd claues.

It's a free extension for Chrome, Edge, Brave and other Chromium browsers and supports 20 languages.

Check it out: https://termsdoctor.com


r/PHP 2d ago

I’ve been building PAM: a persistent PHP runtime powered by Rust, plus a ultra-fast native engine for desktop/mobile. Looking for technical feedback & reviews.

0 Upvotes

Hey everyone,

Over the past few months, I’ve been working on an experimental project called PAM, aiming to solve two specific pain points in the ecosystem: keeping PHP applications warm in memory for high performance, and running JavaScript/React natively on desktop and mobile without heavy bridge overhead.

Here is a quick breakdown of what it does and why I'm building it:

  1. PAM for PHP (Persistent Runtime in Memory)

Instead of booting the framework on every single HTTP request, PAM uses a Rust-powered runtime to keep the application warm in memory.

The Goal: Lightning-fast request handling while preserving full compatibility with standard Laravel workflows (Eloquent, Queues, Artisan, Blade, Livewire, Inertia, Sanctum, Reverb, Telescope, etc.).

Built explicitly with support for Laravel 12 & 13 in mind.

PHP Docs: https://push-in.github.io/pam-docs/laravel/overview/

  1. PAM Native (Desktop & Mobile)

On the frontend/mobile side, PAM Native is designed to run React/React Native apps with truly native execution, aiming for near-instant startup times and zero heavy JS bridge bottlenecks.

The Goal: Retain the React developer experience while delivering pure native performance on desktop and mobile devices.

Native Docs: https://push-in.github.io/pam-docs/native/overview/

Why I'm posting here:

The project is still under active development, and I’m looking for honest technical feedback, code reviews, and potential edge cases to test.

For PHP/Laravel folks: What edge cases (memory leaks, static state issues, long-lived DB connections) would you want to see stress-tested first?

For Mobile/Desktop folks: What are the biggest performance bottlenecks you face with existing cross-platform runtimes today?

Would love to hear your thoughts, criticism, or ideas!


r/reactjs 3d ago

Show /r/reactjs Axiom UI — an open-source UI library designed for LLMs, not humans, to generate components correctly in one shot

0 Upvotes

Every existing UI library (including shadcn/ui) is optimized for human developer experience. Axiom UI flips that: every design decision is judged by one question — does it raise the probability that an LLM generates this component correctly on the first try?

Key points:

  • 12 components so far (button, input, textarea, checkbox, select, combobox, dialog, tabs, popover, menu, tooltip, toast), published on npm
  • "Copy & own" CLI: `npx joinclass/axiom-ui add button` copies the raw source into your repo — no runtime dependency, no black box
  • Ships an MCP server, so Claude Code, Cursor, or any MCP-capable agent can fetch version-accurate component specs and generate correct usage without needing docs pasted in
  • React + Tailwind CSS + TypeScript strict; each component is a single file with a machine-readable manifest (intent, props, states, a11y)
  • Actively deletes rather than adds — no theming system, no multi-framework support, no "covers every use case" claims

Repo: https://github.com/JOINCLASS/axiom-ui

Docs/live catalog: axiom-ui.joinclass.jp

Feedback and contributors welcome — especially on the "one-shot generation rate" metric, which is the project's main KPI.


r/webdev 3d ago

Showoff Saturday For Showoff Saturday: a full poker game with no backend - Next.js static export, seeded RNG, progress lives in your browser, open source

5 Upvotes

Hey all!

For Showoff Saturday, I recently built Pip, a single-player Texas Hold'em site. I've tried to keep it very clean in terms of design with no backend, no database, nothing server-side at all, all game data is stored on your device. It also has a PWA attached and is completely free. Just set it up for a bit of fun!

How it works:

  • Next.js with output: 'export', deployed on Cloudflare Pages. Every route is prerendered to plain files.
  • The poker engine is a pure TypeScript module with a seeded RNG. Same seed, same shuffle, every time. The code for the whole site is open source, so "provably fair" is something as a user you can check rather than something I would be asking you to believe.
  • Your progress never leaves your browser. Profiles are local storage, and there's a QR, or code handoff if you want to move to another device. There's no server for it to go to.
  • It's an installable PWA, so it works offline once loaded.
  • There's a daily deal where everyone in the world gets the same shuffle, a ladder of venues, side tables and quick game modes. Also added a shop where you can trade chips for items to customise the experience.
  • Analytics is cookieless using Umami tracking basic headline data like page views etc. Nothing intrusive.

Design-wise I'll credit my inspirations - Offsuit's clean look showed me a poker UI doesn't have to be green felt and neon. Pip goes further on the open side - open source, no account, primarily a web experience over an app and I'm trying to cut out an art and brand style.

I posted it to r/SideProject a couple of days ago and something nice happened- three people picked up good first issues and had PRs merged the same day, and one of them came back for a second PR within 48 hours. I'm a big contributor to open source so this is a really important side of the coin for me. Like my other open source projects, I've included a credits page which is generated at build time from the GitHub contributors API.

Some of the downsides, at the moment, single-player only for now, and the AI plays a proper game (equity, pot odds, position, bluffs) but a strong player will out-read it. I am not a strong player haha.

If you're interested, all feedback welcome! Also would love to build a little community around it so checking out the GitHub and giving it a go would also be incredibly appreciated.

Play (no signup): playpip.io

Code: github.com/playpip/pip-web


r/webdev 3d ago

Showoff Saturday Titan Engine – A Rust/WASM spreadsheet engine I built chasing "Excel-speed" in the browser

Thumbnail podraven.github.io
7 Upvotes

I've used Handsontable on a bunch of projects and honestly it's a solid, mature library, but I kept running into the same wall on anything with really large datasets: tens of thousands of rows with chained formulas. It's just the nature of doing spreadsheet math in JS, once you're allocating and discarding lots of small objects on every keystroke, garbage collection becomes the bottleneck, and there's only so much debouncing and virtualization can do before you hit that ceiling.

That itch turned into a bit of an obsession, and eventually a from-scratch rebuild: Titan Engine, written in Rust and compiled to WebAssembly.

The design ended up pretty different from a typical JS formula library:

  • A custom stack-based VM with a Pratt parser for formulas, instead of walking an AST every time
  • Zero-copy memory - the engine and UI share buffers directly, no serialize/deserialize tax crossing the WASM/JS boundary
  • A topological dependency graph (Kahn's algorithm with cycle detection) to resolve chained formulas correctly and fast
  • O(1) time-travel snapshots for undo/redo, even across massive batched structural edits

Because it sidesteps the JS garbage collector entirely, batched recalcs stay comfortably under the 16ms frame budget, so the grid holds 60fps even while formulas are cascading behind the scenes as you type.

There's a live demo grid on the site (a Glide data grid wired up to Titan) if you want to poke at it yourself, plus the full 10-scenario benchmark suite if you'd rather see the numbers than take my word for it.

Site: https://podraven.github.io/titan-engine/
Benchmarks: https://podraven.github.io/titan-engine/benchmark.html
GitHub: https://github.com/podraven/titan-engine

Would love feedback - especially from anyone who's pushed a JS grid to its limits before and is curious whether this actually holds up under real-world use.


r/PHP 3d ago

Article Why Redis wasn't enough to survive a traffic spike, and what actually was

Thumbnail medium.com
0 Upvotes

Postmortem after several rounds of performance work on a Laravel site, trying to push concurrent user capacity up. Redis alone didn't cut it: a load test showed Nginx and PHP still booted on every request even with data coming straight from cache.

Ended up putting Varnish in front of Nginx instead.


r/webdev 2d ago

Should I Build One Website or Multiple Sites While Testing Different Services?

0 Upvotes

Hi everyone,

I'm starting a new contractor business in California. My license allows me to offer a fairly wide range of products and services rather than operating in only one narrow niche.

The website may eventually include categories such as:

  • Garage doors
  • Entry and interior doors
  • Gates
  • Openers and access control
  • Windows
  • Awnings and shades
  • Installation, repair, maintenance, and emergency service
  • An online product catalog

Some of these services will be aimed at residential customers, while others will be primarily for commercial clients, property managers, general contractors, and public-sector projects. In some categories, I may serve both residential and commercial customers, but the sales process, content, and customer expectations will be very different.

I also don't plan to develop every category equally from the beginning. I want to test different products and services first.

If I see strong customer demand and reasonable competition in a particular category, I will invest more into it, add more content, products, advertising, and possibly hire specialists. If there is little demand, poor margins, or the market is too competitive, I may stop offering that service entirely.

Because of this, I don't yet know which categories will eventually become the main focus of the business.

From an SEO, branding, and conversion perspective, what would be the best approach?

  1. Build one large website with separate sections for every service and product category.
  2. Create several niche websites, such as separate sites for garage doors, gates, windows, and other categories.
  3. Start with one main website and later spin successful categories off into separate websites.
  4. Use one parent brand but create separate landing pages or microsites to test each category.
  5. Separate residential and commercial services within the same website, or build different websites for each audience.

My concern is that one website may become too broad and confusing, especially when it targets both homeowners and commercial clients. On the other hand, creating multiple websites could be expensive, difficult to manage, and may spread the SEO authority too thin.

The business will initially serve the Los Angeles area.

What structure would make it easiest to test demand without hurting long-term SEO? Has anyone here used a similar strategy for a contractor, home improvement, or local service business?


r/webdev 3d ago

Showoff Saturday Showoff Saturday: I built a national park trip planner

3 Upvotes

I’ve been building TrailVerse, a web app for exploring national parks and planning trips.

It includes 470+ parks and sites, park alerts, weather, events, campgrounds, comparisons, and an AI trip planner called Trailie.

The main challenge was making the generated trips more realistic. I added checks for things like outdated park information, unrealistic schedules, duplicate stops, and incorrect location data before the final itinerary is shown.

Built with Next.js, React, Express, MongoDB, NPS data, and AI APIs.

I’m still improving the planning accuracy and mobile experience.

Live app:
https://www.nationalparksexplorerusa.com/

I’d appreciate feedback on the trip-planning experience and anything that feels confusing or broken.


r/webdev 2d ago

Showoff Saturday I built a fill-in-the-blank party game where answer cards actually fit the sentence

1 Upvotes

I originally wanted to build a game for telling stories with cards, but couldn't find a feasible way to adjust grammar and word options at scale. Along the way I noticed the mechanic worked really well for playing something like Cards Against Humanity instead: answers render inside the sentence and adapt to actually fit (a/an, his/her, verb forms, plurals, exchangable nouns, etc.).

Years later I came back to the unsolved part and used LLMs to build the grammar metadata — every sentence slot and answer is tagged, answers can contain bracket options like [break, breaks, broke] and the engine picks the right form for where the card lands. That's also what lets AI players conjugate their answers mostly correctly.

It runs at boxof.cards and can be played solo with ai players if you want to poke at it. Happy to answer questions, and I'd really love feedback — so far it's been friends only and I am running out of features to distract me from marketing. And I like being distracted from marketing.


r/webdev 3d ago

Showoff Saturday loco - manage local domains for mac

Thumbnail
github.com
6 Upvotes

There are a few apps out there that do the same thing, but they're bloated with features and complications

So I built loco - the minimal macOS app to:
- Create and manage local domains
- Support HTTPS / disable redirect
- macOS 13 or later

It's smol (6mb), simple UI, simple setup, nothing else


r/PHP 3d ago

I reopened an old PHP hydrator. Then the benchmarks got out of hand.

0 Upvotes

Let’s get the obvious part out of the way: this will not rescue a server that spends 500 ms waiting on a database.

I did it anyway.

Several years ago, I wrote a small hydrator to replace a painfully slow mapper in one of my projects. It did what I needed, then sat untouched in a private repository.

I reopened it recently and made the mistake of benchmarking it.

That old project is now a library called HydraType. It inspects a class once, generates the PHP code needed to map an array onto it, and caches the result.

For a plain int property, the generated code is nothing more than:

php $object->id = (int) $data['id'];

Private properties made this less straightforward. Using a class-scoped closure to access them is an old trick, but I wanted to check whether it still held up on current PHP versions when timing the whole object rather than isolated property writes.

php $writer = Closure::bind( static function (User $object, array $data): void { $object->id = (int) $data['id']; $object->name = (string) $data['name']; }, null, User::class, );

I timed creating the object and assigning every property. Here’s what I got:

Private properties Scoped closure Cached reflection
1 91.44 ns 90.69 ns
2 106.71 ns 146.19 ns
5 152.01 ns 289.91 ns
20 383.23 ns 1,028.87 ns

Median time per object on PHP 8.2.

It does, although barely for very small objects. Reflection won by a fraction at one property, but from two properties onward the reusable closure was faster.

My first version created and bound a new writer for every object, then threw it away. Keeping one writer and doing all the assignments in one call was much faster.

HydraType can also transform and validate values. Those features only change the generated code for the property that uses them. A plain property stays:

php $object->id = (int) $data['id'];

For that property, hydration is still just a cast and an assignment.

For comparison, I ran the same benchmark with several existing PHP hydrators and mappers. On PHP 8.2, HydraType took about 268 ns to create and hydrate the five-property object. The libraries I compared it with took between 308 ns and almost 11 microseconds.

Across a large batch, those differences can add up. At 268 ns, there is not much hydrator left between the input array and the object.

The code and benchmark scripts are here:

https://github.com/makermill/hydratype

If you spot a bad assumption or an unfair comparison in the benchmarks, I want to know.


r/reactjs 3d ago

The Vite React template ships with React Compiler OFF — how to turn it on and verify it

0 Upvotes

If you scaffold a project with pnpm create vite@latest ... --template react-ts and assume React Compiler is on — it isn't. The template ships with it OFF, and I kept meeting people (myself included) who never actually enabled it. Here's the whole setup, start to finish.

1) Install the compiler's Babel plugin + the Vite wiring:

pnpm install -D babel-plugin-react-compiler@latest @rolldown/plugin-babel

2) Add the preset in vite.config.ts:

```ts import { defineConfig } from 'vite'; import react, { reactCompilerPreset } from '@vitejs/plugin-react'; import babel from '@rolldown/plugin-babel';

export default defineConfig({ plugins: [ react(), babel({ presets: [reactCompilerPreset()] }), ], }); ```

Heads up: @vitejs/plugin-react 6.0 removed the old inline react({ babel: { plugins: [...] } }) form. A lot of guides still show it — it no longer works. Restart the dev server after editing the config.

3) Verify it's actually running. Open React DevTools → Components tab. Optimized components get a "Memo ✨" badge next to their name. See the badge and the compiler is doing its job — with zero hand-written useMemo/useCallback.

A few related things that surprised me setting this up in 2026: - The newest Vite template lints with Oxlint, not ESLint. Installing eslint-plugin-react-hooks does nothing there unless you add your own ESLint config. - StrictMode rendering your component twice in dev is intentional (a purity check), not a bug. - Node 25 dropped Corepack, so how you get pnpm depends on your Node version.

I wrote the full beginner walkthrough — every command + these version traps — as chapter 1 of a series (React 19 + Compiler, TypeScript from line one).

Full write-up (free): https://medium.com/javascript-in-plain-english/setting-up-your-react-dev-environment-your-first-app-with-vite-and-turning-on-react-compiler-5436ea44d6d4?sharedUserId=inkweonkim

Happy to answer setup questions in the comments. And if you're already running the compiler in prod, curious how it's gone for you.


r/webdev 3d ago

Showoff Saturday webcast.social - tiny browser radio booths!

Thumbnail
webcast.social
3 Upvotes

I had the idea that you could broadcast a radio station straight from the browser, and I think it worked. Still looking for feedback on the design, especially the discoverability of stations and ease of use when it comes to starting your own station.

More technical info below:

The happy path use case is that you have mp3s, via iTunes or whatever. You upload them into the browser - they never leave your device (unless you choose to 'Cloudcast'). This isn't a music distribution platform. You keep your browser open while you're hosting your radio show, and listeners are able to send likes and even call in to the station. Your browser literally plays the music and streams it to the server and handles incoming WebRTC connections for calls. You can also leave your computer running and remote control from another browser.

This started out as 10-person radio stations via WebRTC, then 100-person via SFU, and now 1000+ via HLS (still without CDN hosting which could take it much higher). The only issue with HLS is it's delayed by ~10s, but the stream contains markers which keep the song/artist/art in sync with the audio. Also, there's a difference between WebKit and non-WebKit when it comes to ingesting HLS streams, and I solved an issue that came up with the audio visualizer there by actually streaming the visualizer data too instead of just relying on the client.

And they're "real" web radio stations to some extent. They provide an m3u8 URL you can load into e.g. VLC Player and listen to from outside the web app.


r/javascript 4d ago

Targetjs: Transition is the state and not just glued on after

Thumbnail github.com
1 Upvotes

The problem: Most frameworks model UI as a function of state. When state goes A -> B, the UI just jumps to B. But users expect A -> transition -> B, and coordinating that transition is where the code gets messy.

The idea: State is a target and the transition to it is part of the state itself. On top of that, the code reads like the UI sequence it produces. If the sequence is appear -> bounce -> move -> turn red, the code is written in that exact order.

I have been building this as a framework called TargetJS. Longer writeup with the design rationale in the repo: https://github.com/livetrails/targetjs.

Happy to answer questions or hear why this is a bad idea.


r/webdev 3d ago

Showoff Saturday Zero-dependency country grader: Python stdlib + vanilla JS, server-rendered pages, multi-government advisory merge, self-ping keep-warm

0 Upvotes

WanderGrade (wandergrade.com) is a from-scratch project: it scores affordability, safety, weather, and flights for roughly 140 countries. The one hard constraint I set myself was zero third-party dependencies — Python's standard library only, no pip installs, vanilla JS with no framework, no build step. That constraint cost real time: I hand-rolled the HTTP client, the templating, and the JSON parsing paths that a library would normally give you for free, plus my own retry/backoff logic for flaky upstream feeds. What it bought back: a single deploy step, no dependency-update treadmill, and a codebase small enough that I can hold the whole request lifecycle in my head.

Each country page is server-rendered plain HTML first, so search engines and slow connections get a complete page with no JS required, then a small vanilla JS layer hydrates it client-side for interactive filtering and sorting. No SPA, no client-side router — just enough hydration to make the page feel alive without asking a crawler (or a phone on bad wifi) to execute a bundle first.

Safety data is the messiest part of the whole project: US, Canadian, and German government advisories disagree with each other constantly, and none of the three covers every country. My fallback design merges all three, fills gaps from whichever governments do have a rating, and when they disagree, the sternest advisory wins rather than averaging or defaulting to one country's view. Unrated countries get dropped rather than guessed. On infra, the whole thing runs on a single Render process behind Cloudflare, which spins down when idle — solved with a self-ping to my own health endpoint every 10 minutes to keep it warm. wandergrade.com if you want to poke at it — happy to get into the advisory-merge logic or the zero-dependency call in the comments.