<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Darren Betney</title>
    <description>The latest articles on DEV Community by Darren Betney (@quartalis).</description>
    <link>https://dev.to/quartalis</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3853934%2F64a8f391-d52d-4a64-89b7-8ccfe8389875.png</url>
      <title>DEV Community: Darren Betney</title>
      <link>https://dev.to/quartalis</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/quartalis"/>
    <language>en</language>
    <item>
      <title>Why I built a SvelteKit + FastAPI SaaS Boilerplate (and open-sourced the starter)</title>
      <dc:creator>Darren Betney</dc:creator>
      <pubDate>Tue, 07 Apr 2026 18:47:11 +0000</pubDate>
      <link>https://dev.to/quartalis/why-i-built-a-sveltekit-fastapi-saas-boilerplate-and-open-sourced-the-starter-4ne1</link>
      <guid>https://dev.to/quartalis/why-i-built-a-sveltekit-fastapi-saas-boilerplate-and-open-sourced-the-starter-4ne1</guid>
      <description>&lt;p&gt;Every SaaS boilerplate on the market is Next.js.&lt;/p&gt;

&lt;p&gt;I searched for months. ShipFast, Supastarter, LaunchFast — all Next.js + Supabase or Prisma. Nothing for the SvelteKit + FastAPI stack that I actually build production apps with.&lt;/p&gt;

&lt;p&gt;So I built one.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Stack
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Frontend&lt;/strong&gt;: SvelteKit 5 (runes syntax), Tailwind CSS v4, TypeScript&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Backend&lt;/strong&gt;: FastAPI, SQLAlchemy async, Pydantic v2&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Auth&lt;/strong&gt;: JWT tokens, bcrypt, email verification, password reset&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Billing&lt;/strong&gt;: Stripe subscriptions (3 tiers), customer portal, webhooks&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Database&lt;/strong&gt;: SQLite (dev) / PostgreSQL (production)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Email&lt;/strong&gt;: SMTP/Brevo with HTML templates&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Deploy&lt;/strong&gt;: Docker multi-stage build, nginx reverse proxy&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  What's Included
&lt;/h2&gt;

&lt;p&gt;50+ files extracted from two production SaaS apps I run (a construction management platform and an EHCP tracker for parents).&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Multi-tenant authentication with role-based access control (user / admin / superadmin)&lt;/li&gt;
&lt;li&gt;Stripe subscription billing with checkout sessions, webhooks, and customer portal&lt;/li&gt;
&lt;li&gt;Admin dashboard with user management and system stats&lt;/li&gt;
&lt;li&gt;Landing page with animated pricing table&lt;/li&gt;
&lt;li&gt;Dark theme with 6-level surface hierarchy and configurable accent color&lt;/li&gt;
&lt;li&gt;Docker Compose for one-command production deployment&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Why SvelteKit + FastAPI?
&lt;/h2&gt;

&lt;p&gt;SvelteKit 5 with runes is genuinely faster to build with than React. &lt;code&gt;$state&lt;/code&gt;, &lt;code&gt;$derived&lt;/code&gt;, &lt;code&gt;$effect&lt;/code&gt; — no useState/useEffect ceremony. The compiled output is smaller and faster.&lt;/p&gt;

&lt;p&gt;FastAPI gives you automatic OpenAPI docs, type validation via Pydantic, and async by default. Combined with SQLAlchemy, you get a backend that's both fast to write and fast to run.&lt;/p&gt;

&lt;p&gt;Docker ties it together. One &lt;code&gt;docker compose up -d&lt;/code&gt; and you have a production-ready app with nginx, SSL, health checks, and security headers.&lt;/p&gt;

&lt;h2&gt;
  
  
  Free Starter vs Premium
&lt;/h2&gt;

&lt;p&gt;I open-sourced a lite version with JWT auth, dark theme, and Docker deploy:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Free&lt;/strong&gt;: &lt;a href="https://github.com/Quartalis/sveltekit-fastapi-starter" rel="noopener noreferrer"&gt;github.com/Quartalis/sveltekit-fastapi-starter&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The premium version adds Stripe billing, admin dashboard, multi-tenancy, email verification, password reset, and RBAC:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Premium&lt;/strong&gt;: &lt;a href="https://quartalis.co.uk/store/saas-boilerplate" rel="noopener noreferrer"&gt;quartalis.co.uk/store/saas-boilerplate&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Live Demo
&lt;/h2&gt;

&lt;p&gt;You can see the starter kit running at &lt;a href="https://demo-saas.quartalis.co.uk" rel="noopener noreferrer"&gt;demo-saas.quartalis.co.uk&lt;/a&gt; — try creating an account and logging in.&lt;/p&gt;




&lt;p&gt;If you're building SaaS with SvelteKit + FastAPI, I'd love to hear what you'd want in a boilerplate. The premium version is still evolving and I'm adding features based on what developers actually need.&lt;/p&gt;

</description>
      <category>sveltekit</category>
      <category>fastapi</category>
      <category>webdev</category>
      <category>docker</category>
    </item>
    <item>
      <title>I built 34 free browser-based developer tools — no accounts, no tracking, no ads</title>
      <dc:creator>Darren Betney</dc:creator>
      <pubDate>Tue, 31 Mar 2026 17:26:28 +0000</pubDate>
      <link>https://dev.to/quartalis/i-built-27-free-browser-based-developer-tools-no-accounts-no-tracking-no-ads-5224</link>
      <guid>https://dev.to/quartalis/i-built-27-free-browser-based-developer-tools-no-accounts-no-tracking-no-ads-5224</guid>
      <description>&lt;p&gt;I got tired of using ad-riddled developer tools that send my data to external servers. So I built my own — 34 of them — and made them all free.&lt;/p&gt;

&lt;p&gt;Every tool runs &lt;strong&gt;100% client-side&lt;/strong&gt; in your browser. No data leaves your machine. No accounts. No cookies. No tracking pixels.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Tools
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Code &amp;amp; Data
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Tool&lt;/th&gt;
&lt;th&gt;What it does&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://quartalis.co.uk/tools/json-formatter" rel="noopener noreferrer"&gt;JSON Formatter&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Format, validate, minify JSON with syntax highlighting&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://quartalis.co.uk/tools/regex-tester" rel="noopener noreferrer"&gt;Regex Tester&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Live match highlighting with capture groups&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://quartalis.co.uk/tools/jwt-decoder" rel="noopener noreferrer"&gt;JWT Decoder&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Decode tokens, check expiry, view claims&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://quartalis.co.uk/tools/base64" rel="noopener noreferrer"&gt;Base64 Encoder&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Encode/decode with UTF-8 support&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://quartalis.co.uk/tools/diff-checker" rel="noopener noreferrer"&gt;Diff Checker&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Side-by-side text comparison&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://quartalis.co.uk/tools/yaml-validator" rel="noopener noreferrer"&gt;YAML Validator&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Validate syntax + convert to JSON&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://quartalis.co.uk/tools/html-entities" rel="noopener noreferrer"&gt;HTML Entity Encoder&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Encode/decode HTML entities&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://quartalis.co.uk/tools/sql-formatter" rel="noopener noreferrer"&gt;SQL Formatter&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Format, beautify, minify SQL queries&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://quartalis.co.uk/tools/markdown-editor" rel="noopener noreferrer"&gt;Markdown Editor&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Live preview editor with GitHub-flavoured Markdown&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h3&gt;
  
  
  DevOps &amp;amp; Infrastructure
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Tool&lt;/th&gt;
&lt;th&gt;What it does&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://quartalis.co.uk/tools/docker-run-to-compose" rel="noopener noreferrer"&gt;Docker Run to Compose&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Convert CLI commands to docker-compose.yml&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://quartalis.co.uk/tools/comfyui-validator" rel="noopener noreferrer"&gt;ComfyUI Workflow Validator&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Validate node connections, find broken references&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://quartalis.co.uk/tools/llm-vram-calculator" rel="noopener noreferrer"&gt;LLM VRAM Calculator&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Check if your GPU can run Llama/Qwen/Mixtral&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://quartalis.co.uk/tools/cron-generator" rel="noopener noreferrer"&gt;Cron Expression Generator&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Visual builder with next-run preview&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://quartalis.co.uk/tools/ollama-validator" rel="noopener noreferrer"&gt;Ollama Modelfile Validator&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Validate Ollama Modelfile syntax and parameters&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://quartalis.co.uk/tools/port-checker" rel="noopener noreferrer"&gt;Port Checker&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Check if common ports are open on a host&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://quartalis.co.uk/tools/power-estimator" rel="noopener noreferrer"&gt;Power Estimator&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Estimate PC power consumption from components&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h3&gt;
  
  
  Frontend &amp;amp; CSS
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Tool&lt;/th&gt;
&lt;th&gt;What it does&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://quartalis.co.uk/tools/tailwind-v4-converter" rel="noopener noreferrer"&gt;Tailwind v3 to v4 Converter&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Convert config.js to CSS-first &lt;a class="mentioned-user" href="https://dev.to/theme"&gt;@theme&lt;/a&gt; syntax&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://quartalis.co.uk/tools/svelte5-converter" rel="noopener noreferrer"&gt;Svelte 4 to 5 Runes Converter&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Convert export let to $props(), $: to $derived&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://quartalis.co.uk/tools/css-gradient" rel="noopener noreferrer"&gt;CSS Gradient Generator&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Visual linear/radial gradient builder&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://quartalis.co.uk/tools/box-shadow" rel="noopener noreferrer"&gt;CSS Box Shadow&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Multi-layer shadow builder with inset&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://quartalis.co.uk/tools/flexbox-generator" rel="noopener noreferrer"&gt;Flexbox Generator&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Visual layout builder&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://quartalis.co.uk/tools/css-units" rel="noopener noreferrer"&gt;CSS Unit Converter&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;px to rem/em/pt/vw/vh&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://quartalis.co.uk/tools/aspect-ratio" rel="noopener noreferrer"&gt;Aspect Ratio Calculator&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Calculate and convert aspect ratios&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h3&gt;
  
  
  AI &amp;amp; Utilities
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Tool&lt;/th&gt;
&lt;th&gt;What it does&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://quartalis.co.uk/tools/token-counter" rel="noopener noreferrer"&gt;AI Token Counter&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Estimate tokens for GPT-4, Claude, LLaMA + API costs&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://quartalis.co.uk/tools/password-generator" rel="noopener noreferrer"&gt;Password Generator&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Web Crypto API, strength indicator, bulk generation&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://quartalis.co.uk/tools/hash-generator" rel="noopener noreferrer"&gt;Hash Generator&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;MD5, SHA-1, SHA-256, SHA-512&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://quartalis.co.uk/tools/uuid-generator" rel="noopener noreferrer"&gt;UUID Generator&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;v4 UUIDs with bulk generation&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://quartalis.co.uk/tools/url-encoder" rel="noopener noreferrer"&gt;URL Encoder&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Encode/decode URIs&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://quartalis.co.uk/tools/word-counter" rel="noopener noreferrer"&gt;Word Counter&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Words, chars, sentences, reading time&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://quartalis.co.uk/tools/lorem-ipsum" rel="noopener noreferrer"&gt;Lorem Ipsum&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Paragraphs, sentences, or words&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://quartalis.co.uk/tools/timestamp-converter" rel="noopener noreferrer"&gt;Timestamp Converter&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Unix to human-readable with live clock&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://quartalis.co.uk/tools/qr-code" rel="noopener noreferrer"&gt;QR Code Generator&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Generate QR codes with custom colours and sizes&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://quartalis.co.uk/tools/favicon-generator" rel="noopener noreferrer"&gt;Favicon Generator&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Generate multi-format favicons from any image&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://quartalis.co.uk/tools/roast-my-stack" rel="noopener noreferrer"&gt;Roast My Stack&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Get your tech stack brutally (but helpfully) roasted&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  Why client-side matters
&lt;/h2&gt;

&lt;p&gt;Most online tools send your data to a server. JSON formatters, regex testers, even password generators — they often make API calls. Your data goes somewhere.&lt;/p&gt;

&lt;p&gt;These tools use:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;JSON.parse()&lt;/code&gt; / &lt;code&gt;JSON.stringify()&lt;/code&gt; for JSON&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;crypto.subtle&lt;/code&gt; for hashing&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;crypto.getRandomValues()&lt;/code&gt; for passwords&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;RegExp&lt;/code&gt; for regex testing&lt;/li&gt;
&lt;li&gt;Pure math for VRAM calculations&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Nothing leaves your browser tab.&lt;/p&gt;

&lt;h2&gt;
  
  
  The tech
&lt;/h2&gt;

&lt;p&gt;Built with &lt;strong&gt;SvelteKit 5&lt;/strong&gt; and &lt;strong&gt;Tailwind CSS v4&lt;/strong&gt;. Statically generated — the entire site is pre-rendered HTML/CSS/JS served from nginx. No server-side processing for any tool.&lt;/p&gt;

&lt;h2&gt;
  
  
  What's next
&lt;/h2&gt;

&lt;p&gt;I'm adding more tools based on what developers actually search for. If there's a tool you use daily that's either ad-infested or sends data to servers, let me know — I'll probably build a client-side version.&lt;/p&gt;

&lt;p&gt;All tools: &lt;a href="https://quartalis.co.uk/tools" rel="noopener noreferrer"&gt;quartalis.co.uk/tools&lt;/a&gt;&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Built by &lt;a href="https://quartalis.co.uk" rel="noopener noreferrer"&gt;Quartalis&lt;/a&gt; — a UK software engineering studio. We also sell production-tested Docker stacks, n8n workflows, and SvelteKit starter kits if that's your thing.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>javascript</category>
      <category>productivity</category>
      <category>showdev</category>
    </item>
  </channel>
</rss>
