<?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: Hassan Mubiru</title>
    <description>The latest articles on DEV Community by Hassan Mubiru (@hassanmubiru).</description>
    <link>https://dev.to/hassanmubiru</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.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F615592%2Fc6b0c28e-5be4-470e-87ec-a00f4dea04ed.jpeg</url>
      <title>DEV Community: Hassan Mubiru</title>
      <link>https://dev.to/hassanmubiru</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/hassanmubiru"/>
    <language>en</language>
    <item>
      <title>Building a REST API in TypeScript with StreetJS in Minutes</title>
      <dc:creator>Hassan Mubiru</dc:creator>
      <pubDate>Sat, 20 Jun 2026 09:47:04 +0000</pubDate>
      <link>https://dev.to/hassanmubiru/building-a-rest-api-in-typescript-with-streetjs-in-minutes-n2m</link>
      <guid>https://dev.to/hassanmubiru/building-a-rest-api-in-typescript-with-streetjs-in-minutes-n2m</guid>
      <description>&lt;p&gt;&lt;strong&gt;This article should walk through:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Creating a project&lt;br&gt;
npx @streetjs/cli create my-api&lt;br&gt;
cd my-api&lt;br&gt;
npm install&lt;br&gt;
npm run dev&lt;br&gt;
Creating a controller&lt;br&gt;
@Controller('/products')&lt;br&gt;
export class ProductsController {&lt;br&gt;
  &lt;a class="mentioned-user" href="https://dev.to/get"&gt;@get&lt;/a&gt;('/')&lt;br&gt;
  async list() {&lt;br&gt;
    return products;&lt;br&gt;
  }&lt;br&gt;
}&lt;br&gt;
Testing the endpoint&lt;br&gt;
curl &lt;a href="http://localhost:3000/products" rel="noopener noreferrer"&gt;http://localhost:3000/products&lt;/a&gt;&lt;br&gt;
Adding validation&lt;br&gt;
Adding PostgreSQL&lt;br&gt;
Deploying&lt;/p&gt;

&lt;p&gt;If you're interested in exploring it:&lt;/p&gt;

&lt;p&gt;GitHub: &lt;a href="https://github.com/hassanmubiru/StreetJS" rel="noopener noreferrer"&gt;https://github.com/hassanmubiru/StreetJS&lt;/a&gt;&lt;br&gt;
Documentation: &lt;a href="https://hassanmubiru.github.io/StreetJS/" rel="noopener noreferrer"&gt;https://hassanmubiru.github.io/StreetJS/&lt;/a&gt;&lt;/p&gt;

</description>
      <category>typescript</category>
      <category>api</category>
      <category>node</category>
      <category>backend</category>
    </item>
    <item>
      <title>Why I Built StreetJS Instead of Using Express or NestJS</title>
      <dc:creator>Hassan Mubiru</dc:creator>
      <pubDate>Sat, 20 Jun 2026 09:32:41 +0000</pubDate>
      <link>https://dev.to/hassanmubiru/why-i-built-streetjs-instead-of-using-express-or-nestjs-1n00</link>
      <guid>https://dev.to/hassanmubiru/why-i-built-streetjs-instead-of-using-express-or-nestjs-1n00</guid>
      <description>&lt;p&gt;When I started building backend applications with Node.js, I found myself choosing between two extremes:&lt;/p&gt;

&lt;p&gt;Lightweight frameworks like Express that require assembling many packages yourself.&lt;br&gt;
Large frameworks that provide many features but add complexity and abstraction.&lt;/p&gt;

&lt;p&gt;After building APIs, authentication systems, real-time applications, and background-job services repeatedly, I decided to create a framework that focused on a different goal:&lt;/p&gt;

&lt;p&gt;Reduce setup complexity without sacrificing developer control.&lt;/p&gt;

&lt;p&gt;That project became StreetJS.&lt;/p&gt;

&lt;p&gt;The Problem&lt;/p&gt;

&lt;p&gt;A typical backend project often requires:&lt;/p&gt;

&lt;p&gt;Routing&lt;br&gt;
Authentication&lt;br&gt;
Database integration&lt;br&gt;
Validation&lt;br&gt;
WebSockets&lt;br&gt;
Background jobs&lt;br&gt;
Configuration management&lt;br&gt;
Security middleware&lt;/p&gt;

&lt;p&gt;In many cases, developers spend hours assembling and configuring packages before writing actual business logic.&lt;/p&gt;

&lt;p&gt;What StreetJS Tries to Solve&lt;/p&gt;

&lt;p&gt;StreetJS focuses on:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Consistent Architecture&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Instead of every project having a different structure, StreetJS provides conventions that scale from small projects to larger applications.&lt;/p&gt;

&lt;p&gt;@Controller('/users')&lt;br&gt;
export class UsersController {&lt;br&gt;
  &lt;a class="mentioned-user" href="https://dev.to/get"&gt;@get&lt;/a&gt;('/:id')&lt;br&gt;
  async get(ctx: StreetContext) {&lt;br&gt;
    return this.users.findById(ctx.params.id);&lt;br&gt;
  }&lt;br&gt;
}&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;TypeScript-First Development&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;TypeScript is not an afterthought.&lt;/p&gt;

&lt;p&gt;interface CreateUserDto {&lt;br&gt;
  email: string;&lt;br&gt;
  name: string;&lt;br&gt;
}&lt;/p&gt;

&lt;p&gt;Types flow through the application from request to response.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Built-In Realtime Support&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Modern applications increasingly need live updates.&lt;/p&gt;

&lt;p&gt;Examples:&lt;/p&gt;

&lt;p&gt;Chat applications&lt;br&gt;
Collaboration tools&lt;br&gt;
Notifications&lt;br&gt;
Dashboards&lt;br&gt;
Multiplayer experiences&lt;/p&gt;

&lt;p&gt;StreetJS includes WebSocket support without requiring major architectural changes.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Flexible Database Support&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Developers can start quickly with SQLite and later move to PostgreSQL as requirements grow.&lt;/p&gt;

&lt;p&gt;This makes local development simpler while still supporting production-grade deployments.&lt;/p&gt;

&lt;p&gt;Who Is StreetJS For?&lt;/p&gt;

&lt;p&gt;StreetJS is designed for:&lt;/p&gt;

&lt;p&gt;SaaS applications&lt;br&gt;
Internal tools&lt;br&gt;
Real-time applications&lt;br&gt;
Marketplace platforms&lt;br&gt;
Social applications&lt;br&gt;
Startup MVPs&lt;br&gt;
What Makes It Different?&lt;/p&gt;

&lt;p&gt;The goal is not to replace every framework.&lt;/p&gt;

&lt;p&gt;Express, Fastify, NestJS, and others are excellent tools.&lt;/p&gt;

&lt;p&gt;StreetJS focuses on a specific developer experience:&lt;/p&gt;

&lt;p&gt;TypeScript-first&lt;br&gt;
Realtime-ready&lt;br&gt;
Authentication-ready&lt;br&gt;
Consistent project structure&lt;br&gt;
Minimal setup&lt;br&gt;
Final Thoughts&lt;/p&gt;

&lt;p&gt;Frameworks should help developers build products faster.&lt;/p&gt;

&lt;p&gt;StreetJS was created to reduce repetitive setup work while keeping applications maintainable and scalable.&lt;/p&gt;

&lt;p&gt;If you're interested in exploring it:&lt;/p&gt;

&lt;p&gt;GitHub: &lt;a href="https://github.com/hassanmubiru/StreetJS" rel="noopener noreferrer"&gt;https://github.com/hassanmubiru/StreetJS&lt;/a&gt;&lt;br&gt;
Documentation: &lt;a href="https://hassanmubiru.github.io/StreetJS/" rel="noopener noreferrer"&gt;https://hassanmubiru.github.io/StreetJS/&lt;/a&gt;&lt;/p&gt;

</description>
      <category>typescript</category>
      <category>node</category>
      <category>webdev</category>
      <category>backend</category>
    </item>
  </channel>
</rss>
