Fully remote
Competitive salary and benefits
Modern SvelteKit 2 and Svelte 5 stack
Small team, high productivity, low bureaucracy
Speed—every page should load fast from a full reload, ideally < 350ms. Db queries should make use of optimizations like denormalization and indexes based on a thoughtful analysis about read-heavy vs. write-heavy workflows.
Responsive design—this is a universal PWA that is designed to run on desktop and mobile devices. In addition to loading and navigating quickly, the app needs to be functional and look good across different viewport widths in order to feel like a first-class native experience on both mobile and desktop.
End-to-end type safety through a combination of page data, prisma queries, and Zod schemas.
Minimize type-level programming—avoid complex generics, bespoke TypeScript interfaces, types, and utilities.
Primitives over abstractions—you probably don't need a custom class, factory, or singleton.
Prioritize Page data and Form actions over server endpoints and custom fetch()
.
URL as the source of truth—route and search params should be used in combination with goto()
and invalidate()
to refresh state.
Authorization—did you check whether the current logged-in user has access to that page, form action, or server endpoint?
Copy-paste over DRY—there's nothing wrong with copy-pasting the same chunk of code a few times. Once you cross some threshold of copy-pastes, consider refactoring into a shared component or utility. Premature optimization is the root of all evil.
Server-side rendering (SSR) where refreshing a page should be indistinguishable from a client-side navigation to that page.
Embrace the document db zen—prefer nesting embedded arrays and objects over introducing collections and relationships, prefer required model properties over optional.
Keep dependencies up-to-date—when was the last time you ran bun i && npm outdated
? The ecosystem moves fast, we must keep up with it.
Introduce new dependencies judiciously—how many stars on github, when was the last release or commit to main, how many issues are open, how timely are the responses, how much will the app bundle size increase?
For dev UX, prioritize speed over exhaustive checking and analysis—svelte-check is probably good enough, eslint is probably not worth it.
Avoid custom css in <style>
blocks—Tailwind classes all the way down. There's nothing wrong with long class strings. Create Svelte snippets or shared components when reused.
Use class={cn()}
utility fn to apply conditional class strings as well as properly merge tailwind classes.
Take advantage of Copilot, but don't rely on it.
Embrace the mainstream—macOS with Apple Silicon is the best operating system, VS Code is the best text editor; there's peace and productivity awaiting you in the mainstream.