<?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: Matteo De Micheli</title>
    <description>The latest articles on DEV Community by Matteo De Micheli (@matteodem).</description>
    <link>https://dev.to/matteodem</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%2F137474%2Fc2d153c2-91cc-4c68-ade3-ff1a95cb8031.jpeg</url>
      <title>DEV Community: Matteo De Micheli</title>
      <link>https://dev.to/matteodem</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/matteodem"/>
    <language>en</language>
    <item>
      <title>Why Meteor.js Is Still Awesome in 2025 — A Deep-Dive Case Study Building Sounds Social</title>
      <dc:creator>Matteo De Micheli</dc:creator>
      <pubDate>Wed, 13 Aug 2025 15:39:02 +0000</pubDate>
      <link>https://dev.to/matteodem/why-meteorjs-is-still-awesome-in-2025-a-deep-dive-case-study-building-sounds-social-2854</link>
      <guid>https://dev.to/matteodem/why-meteorjs-is-still-awesome-in-2025-a-deep-dive-case-study-building-sounds-social-2854</guid>
      <description>&lt;p&gt;When people rattle off the “modern JS stack” in 2025, the list usually starts with Next.js and SvelteKit, detours through Remix, and ends in a debate about which meta-framework does routing and data fetching most elegantly. Meteor.js rarely gets a mention—and yet, for certain products, it’s still the most direct route from idea to a live, revenue-capable app.&lt;/p&gt;

&lt;p&gt;Sounds Social—my platform for music producers to find collaborators, exchange feedback, and financially support each other—was built on Meteor. Not because I’m nostalgic, but because Meteor still removes a pile of integration and plumbing work that other stacks leave to you. This post is a technical, boots-on-the-ground case study of that decision: what worked, what didn’t, and how it all fits together in 2025.&lt;/p&gt;




&lt;h2&gt;
  
  
  The Project: What Sounds Social Needs from Its Stack
&lt;/h2&gt;

&lt;p&gt;Sounds Social is a real-time product by design:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A Tinder-style Collab Finder for swiping on potential collaborators.&lt;/li&gt;
&lt;li&gt;A feedback-for-feedback workflow that rewards thoughtful critique.&lt;/li&gt;
&lt;li&gt;Artist support where 70% of PRO plan revenue is transparently reinvested into artists via a Support button.&lt;/li&gt;
&lt;li&gt;Track uploads, profile edits, and notifications that show up instantly, without a page refresh.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Those requirements imply a few non-negotiables: reliable real-time updates, an authentication system that isn’t a month of work, first-class email support for account flows, and deployment that doesn’t require a DevOps degree. Meteor clears those hurdles in a single stack.&lt;/p&gt;




&lt;h2&gt;
  
  
  Why Meteor in 2025 (When the Cool Kids Use Something Else)
&lt;/h2&gt;

&lt;p&gt;I chose Meteor for three practical reasons:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Accounts out of the box.&lt;/strong&gt; Meteor’s accounts system (with email/password, tokens, reset flows, etc.) still saves a huge amount of time. In most stacks, auth is a mix of libraries and boilerplate you duct-tape together; Meteor makes it a solved problem.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Email without yak-shaving.&lt;/strong&gt; Verification emails, password resets, and transactional notifications are normal app features that can consume days in other setups. Meteor’s email package is integrated and predictable.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Galaxy deployment.&lt;/strong&gt; I can run a production build with a single command, get SSL, load balancing, and monitoring, and scale vertically or horizontally without rewriting my infrastructure. Shipping features beats tuning Dockerfiles.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;I work with SvelteKit, Next.js, and NestJS too; they’re fantastic. But Meteor still minimizes surface area when you need a real-time, account-centric app running quickly.&lt;/p&gt;




&lt;h2&gt;
  
  
  The Stack (High-Level)
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Frontend:&lt;/strong&gt; React + Tailwind CSS&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Backend:&lt;/strong&gt; Meteor.js (methods, publications/subscriptions, accounts, email)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Database:&lt;/strong&gt; MongoDB&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;File uploads:&lt;/strong&gt; Bytescale (for audio storage, delivery, and processing)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Payments:&lt;/strong&gt; Stripe (PRO memberships and support payouts)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Hosting:&lt;/strong&gt; Galaxy, deployed with &lt;code&gt;meteor deploy&lt;/code&gt; (one command, production-grade)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Everything is JavaScript end-to-end, which helps maintain velocity and lowers cognitive overhead.&lt;/p&gt;




&lt;h2&gt;
  
  
  Architecture at a Glance
&lt;/h2&gt;

&lt;p&gt;Rather than code, here’s the mental model I actually use when reasoning about the system:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Client renders UI with React.&lt;/strong&gt; Data is subscribed to from Meteor publications. Components re-render when subscribed data changes.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Methods mutate state.&lt;/strong&gt; User interactions (creating a track, leaving feedback, supporting an artist) call Meteor methods. Methods validate input and change data in MongoDB.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Pub/Sub streams updates.&lt;/strong&gt; Publications stream only the fields the UI needs. When documents change, connected clients automatically receive the new snapshots.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;External services are decoupled.&lt;/strong&gt; Uploads are handed off to Bytescale (which handles large files and CDN delivery). Stripe handles subscription lifecycles and payouts. Meteor focuses on orchestrating the flows and maintaining consistent app state.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Galaxy manages runtime.&lt;/strong&gt; Logs, metrics, memory usage, and scaling are handled there. When I needed more memory, I increased the container size and moved on.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;This is the core value: a tight loop between UI, data, and deployment with minimal configuration friction.&lt;/p&gt;




&lt;h2&gt;
  
  
  Real-Time UX: Why It Matters for Musicians
&lt;/h2&gt;

&lt;p&gt;Meteor’s reactivity is more than a convenience—it creates the “alive” feeling that makes Sounds Social fun to use.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Collab Finder feels instant.&lt;/strong&gt; New profiles appear without reloads as people join or update their preferences.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Feedback threads stay fresh.&lt;/strong&gt; When someone leaves feedback on your track, it just shows up. No polling, no manual refresh patterns, no “fetch more” gymnastics.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Support events feel human.&lt;/strong&gt; When a user supports an artist, the acknowledgment is immediate; the UI updates across sessions so both sides see the effect right away.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I don’t have to wire socket channels, invent a cache invalidation strategy, or bolt on a separate real-time system. Meteor’s DDP and reactivity do the heavy lifting.&lt;/p&gt;




&lt;h2&gt;
  
  
  Authentication and Identity
&lt;/h2&gt;

&lt;p&gt;Meteor’s accounts system handled the basics with almost no ceremony:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Email/password sign-up and sign-in.&lt;/li&gt;
&lt;li&gt;Verification and password reset flows.&lt;/li&gt;
&lt;li&gt;Server-side protection and user context for methods and publications.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Because it’s built in, I avoided common pitfalls: inconsistent password hashing, homemade token flows, or ad-hoc email templates scattered around the codebase. The benefit isn’t just time saved; it’s fewer security footguns.&lt;/p&gt;




&lt;h2&gt;
  
  
  Email and Transactional Messaging
&lt;/h2&gt;

&lt;p&gt;Email is deceptively complex in most stacks (providers, templating, deliverability, environments). Meteor’s email integration gave me a consistent way to handle:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Account verification and resets.&lt;/li&gt;
&lt;li&gt;Event notifications (e.g., “You received feedback”).&lt;/li&gt;
&lt;li&gt;Administrative messages.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If email isn’t your app’s “core,” you don’t want it soaking up a week of engineering time every quarter. With Meteor, it doesn’t.&lt;/p&gt;




&lt;h2&gt;
  
  
  Deployment and Operations on Galaxy
&lt;/h2&gt;

&lt;p&gt;My deploy process is uneventful—by design. I bundle settings, run a command, and Galaxy takes it from there. I get:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;SSL termination and routing.&lt;/li&gt;
&lt;li&gt;Application and Mongo connection metrics.&lt;/li&gt;
&lt;li&gt;Straightforward vertical and horizontal scaling options.&lt;/li&gt;
&lt;li&gt;Centralized logs.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I did hit a resource boundary once: &lt;strong&gt;memory usage&lt;/strong&gt; grew as the app’s feature set increased. The solution was simple—scale up the container on Galaxy. No rewrite, no cluster surgery, just a configuration change. That predictable operations path keeps my focus on product work.&lt;/p&gt;




&lt;h2&gt;
  
  
  Scaling and Performance: Practical Tactics
&lt;/h2&gt;

&lt;p&gt;Meteor has a reputation for being “great for prototypes, tricky at scale.” My experience so far:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Publish only what you need.&lt;/strong&gt; Minimizing fields in publications keeps payloads tight and reactivity efficient.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Be intentional about data shapes.&lt;/strong&gt; The UI doesn’t need full documents most of the time; streaming smaller projections yields better responsiveness.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Offload heavy work.&lt;/strong&gt; Large file handling is delegated to Bytescale. Any future audio processing or analysis can live in background jobs.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Mind memory.&lt;/strong&gt; Track usage and bump containers before it becomes an issue. Galaxy makes this painless.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If you’re building a global, read-mostly content site, Meteor isn’t the obvious choice. But for collaborative, stateful apps with logged-in users, it scales in a very sane, very maintainable way—especially early on.&lt;/p&gt;




&lt;h2&gt;
  
  
  Third-Party Integrations
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Bytescale for uploads.&lt;/strong&gt; Audio files are large. Rather than pull them through my own servers, Bytescale handles uploads, storage, and CDN-backed delivery. This keeps my Meteor server free to handle real-time UX and business logic while a specialized service tackles the bandwidth-heavy path.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Stripe for payments.&lt;/strong&gt; The PRO plan charges users and allocates 70% of the revenue to support artists through a monthly payout mechanism. Stripe’s tooling and compliance posture make it the sensible choice. Meteor’s job here is record-keeping and orchestrating the app-level side effects (entitlements, receipts, support events).&lt;/p&gt;




&lt;h2&gt;
  
  
  Developer Experience in 2025
&lt;/h2&gt;

&lt;p&gt;Working in Meteor with React feels refreshingly uncluttered:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;One language everywhere.&lt;/strong&gt; No context switching between server and client paradigms or between API schemas and UI queries.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Minimal boilerplate.&lt;/strong&gt; I didn’t spend my first week scaffolding auth, API routes, and deployment. I built product features.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Reactivity by default.&lt;/strong&gt; The app behaves like a modern collaborative tool because the data layer is reactive, not bolted on later.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Compared to other stacks I enjoy (Next.js, SvelteKit, NestJS), Meteor’s biggest edge is &lt;em&gt;time to meaningful functionality&lt;/em&gt;. If your roadmap is heavy on real-time collaboration, you feel that advantage immediately.&lt;/p&gt;




&lt;h2&gt;
  
  
  Trade-Offs and Costs
&lt;/h2&gt;

&lt;p&gt;Every stack has a “tax.” Here are Meteor’s in my experience:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Hosting cost.&lt;/strong&gt; Galaxy isn’t the cheapest. You’re paying for simplicity and focus. For me, that trade is worth it because it frees time for feature work and keeps operational risk low.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Ecosystem mindshare.&lt;/strong&gt; Meteor is niche in 2025. Excellent resources exist, but you won’t find as many tutorials or boilerplates as with Next.js. If you hire, you’ll prioritize strong JS fundamentals over Meteor-specific experience.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Tight Mongo coupling.&lt;/strong&gt; Meteor’s superpower is its reactivity with Mongo; if you need polyglot databases and edge-first primitives from day one, you’ll either add complexity or consider a different architecture.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;None of these were deal-breakers for Sounds Social. On balance, they were more than offset by speed of delivery and app quality.&lt;/p&gt;




&lt;h2&gt;
  
  
  Security Posture (What I Pay Attention To)
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Method boundaries and validation.&lt;/strong&gt; All mutations pass through well-scoped methods with input validation and permission checks.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Publish the minimum.&lt;/strong&gt; Publications expose only what the client needs. No sensitive fields ride along.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Config discipline.&lt;/strong&gt; Secrets live in environment variables / settings files kept out of version control. Payment webhooks and email credentials are isolated.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Rate limiting and abuse prevention.&lt;/strong&gt; Real-time apps can be chatty; rate limiting on critical paths keeps things healthy.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Security isn’t a Meteor-specific story—it’s a product discipline. Meteor just makes the guardrails easier to implement consistently.&lt;/p&gt;




&lt;h2&gt;
  
  
  Testing, Monitoring, and Observability
&lt;/h2&gt;

&lt;p&gt;I lean on three layers:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Unit tests where logic is dense.&lt;/strong&gt; Business rules around support allocations and entitlements get tests first.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Smoke tests for critical paths.&lt;/strong&gt; Sign-up, upload, support, and feedback flows run in basic automated checks before deploying.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Galaxy monitoring and logs.&lt;/strong&gt; Memory, CPU, method call rates, and publication activity tell me when to optimize or scale.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;In practice, this is enough to ship confidently without building a sprawling test harness up front. As traffic grows, it’s straightforward to deepen coverage.&lt;/p&gt;




&lt;h2&gt;
  
  
  Lessons Learned (So You Don’t Have To)
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Design your publications early.&lt;/strong&gt; Treat them like an API surface. Decide what the client truly needs and stick to it.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Real-time is a feature, not a party trick.&lt;/strong&gt; Use reactivity to make core workflows feel instant; don’t sprinkle it everywhere just because you can.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Spend money where it buys time.&lt;/strong&gt; Galaxy’s cost is validated the first time you avoid a weekend chasing container edge cases.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Avoid premature microservices.&lt;/strong&gt; Let Meteor do what it’s uniquely good at. Pull in specialists (Bytescale, Stripe) only where they clearly outperform a homegrown approach.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Roadmap: Where Sounds Social Goes Next
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Refined discovery.&lt;/strong&gt; Better filters and ranking in the Collab Finder so producers surface the right partners faster.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Richer feedback loops.&lt;/strong&gt; More context around critiques (e.g., timestamped notes) to improve how producers learn from each other.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Community mechanics.&lt;/strong&gt; Challenges and themed collaborations to grow healthy network effects.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Creator tooling.&lt;/strong&gt; Quality-of-life improvements for uploads, drafts, and profile management.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Sustainable economics.&lt;/strong&gt; Continue evolving the PRO plan so the 70% reinvestment stays transparent, fair, and artist-friendly.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Meteor remains a strong foundation for all of the above because the primitives (auth, real-time, deployability) stay the same while features evolve.&lt;/p&gt;




&lt;h2&gt;
  
  
  Who Should Consider Meteor in 2025?
&lt;/h2&gt;

&lt;p&gt;Choose Meteor if you’re building:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Real-time collaborative tools (dashboards, editors, chat-like products).&lt;/li&gt;
&lt;li&gt;Account-centric apps where auth, email, and live updates are table stakes.&lt;/li&gt;
&lt;li&gt;MVPs that need to reach production quickly without a lot of integration risk.&lt;/li&gt;
&lt;li&gt;Internal tools where developer velocity matters more than edge-infrastructure gymnastics.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Reach for something like Next.js/SvelteKit if:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;SEO/SSR and edge rendering are your top priorities from day one.&lt;/li&gt;
&lt;li&gt;Your app is mostly static content or marketing pages.&lt;/li&gt;
&lt;li&gt;You want an extremely broad hiring pool and the largest library ecosystem for your exact use case.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;There’s no single right answer—just trade-offs. For Sounds Social, Meteor made the right ones.&lt;/p&gt;




&lt;h2&gt;
  
  
  The Short Version (If You Skipped Here)
&lt;/h2&gt;

&lt;p&gt;Meteor is still awesome in 2025 for the kinds of products that benefit most from it: real-time, authenticated apps that need to ship quickly and feel alive. Accounts, email, pub/sub, and one-command deployment remove weeks of setup and entire categories of production risk. The costs—mainly Galaxy pricing and smaller ecosystem mindshare—are real but manageable.&lt;/p&gt;

&lt;p&gt;Sounds Social exists in production because Meteor let me spend nearly all of my time on product, not plumbing. If you’ve written Meteor off as yesterday’s framework, it’s worth another look—especially if your app thrives on real-time collaboration and fast iteration.&lt;/p&gt;

</description>
      <category>meteor</category>
      <category>javascript</category>
      <category>webdev</category>
      <category>casestudy</category>
    </item>
    <item>
      <title>How I Built and Launched My Own SaaS in 30 Days (My Journey So Far)</title>
      <dc:creator>Matteo De Micheli</dc:creator>
      <pubDate>Mon, 04 Aug 2025 15:44:42 +0000</pubDate>
      <link>https://dev.to/matteodem/how-i-built-and-launched-my-own-saas-in-30-days-my-journey-so-far-501c</link>
      <guid>https://dev.to/matteodem/how-i-built-and-launched-my-own-saas-in-30-days-my-journey-so-far-501c</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;“Done is better than perfect.”&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;I’ve seen this quote floating around for years, but it never truly clicked—until now.  &lt;/p&gt;

&lt;p&gt;This is the story of how I built &lt;strong&gt;Sounds Social&lt;/strong&gt;, a platform for music producers and musicians, from &lt;strong&gt;idea to working beta in just 30 days&lt;/strong&gt;. I’m still early in the journey (with zero users so far), but I wanted to share what I’ve learned, what worked, and where I’m headed next.  &lt;/p&gt;




&lt;h2&gt;
  
  
  Why I Decided to Build a SaaS (Finally)
&lt;/h2&gt;

&lt;p&gt;For a long time, I’ve wanted to build something that wasn’t just another portfolio project or a small tool. I wanted to create something that could become a &lt;strong&gt;real product&lt;/strong&gt;, maybe even a sustainable business one day.  &lt;/p&gt;

&lt;p&gt;The idea for Sounds Social came from watching the music production community online. There are plenty of places to share finished tracks, but there wasn’t a platform that truly helped &lt;strong&gt;producers connect, collaborate, and exchange feedback in a structured way&lt;/strong&gt;.  &lt;/p&gt;

&lt;p&gt;So I thought:&lt;br&gt;&lt;br&gt;
&lt;strong&gt;What if there was a dedicated space for this?&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Not Instagram, not Discord—but a platform designed specifically for producers to share snippets, find collaborators, and grow together.  &lt;/p&gt;

&lt;p&gt;That was enough to get me started. I set myself a challenge:&lt;br&gt;&lt;br&gt;
&lt;strong&gt;Build and launch a working beta in 30 days.&lt;/strong&gt;  &lt;/p&gt;




&lt;h2&gt;
  
  
  Defining the MVP: What’s the Bare Minimum?
&lt;/h2&gt;

&lt;p&gt;When you only have a month, you can’t build everything. The biggest mistake I see (and used to make myself) is trying to create a fully-featured product before launch.  &lt;/p&gt;

&lt;p&gt;So I focused on &lt;strong&gt;three core features&lt;/strong&gt;:  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;✅ &lt;strong&gt;Track Uploads&lt;/strong&gt; — Users can upload and share their sounds
&lt;/li&gt;
&lt;li&gt;✅ &lt;strong&gt;Collab Finder&lt;/strong&gt; — A simple way to connect with other musicians
&lt;/li&gt;
&lt;li&gt;✅ &lt;strong&gt;Feedback-for-Feedback&lt;/strong&gt; — A system to exchange track feedback fairly
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Everything else went to the &lt;strong&gt;“later”&lt;/strong&gt; list. No advanced analytics, no complex profiles, no mobile app (yet). Just the basics.  &lt;/p&gt;




&lt;h2&gt;
  
  
  Choosing the Tech Stack (and Why I Didn’t Overthink It)
&lt;/h2&gt;

&lt;p&gt;I’m a full-stack developer, but I knew spending days debating the tech stack would kill my 30-day goal. So I picked tools that I knew could get me to production fast:  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Frontend:&lt;/strong&gt; React + Tailwind CSS
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Backend:&lt;/strong&gt; Meteor.js
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Database:&lt;/strong&gt; MongoDB (built into Meteor)
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;File Storage:&lt;/strong&gt; Bytescale (life saver for media uploads)
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Deployment:&lt;/strong&gt; Galaxy (Meteor’s hosting platform, easy and smooth)
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Meteor might sound like an unusual choice in 2025, but honestly, it’s perfect for rapid prototyping. Real-time data, user accounts, and a reactive system out of the box? Yes, please.  &lt;/p&gt;




&lt;h3&gt;
  
  
  Quick Note on AI Assistance
&lt;/h3&gt;

&lt;p&gt;Here’s a confession: I didn’t code everything alone. I used &lt;strong&gt;Gemini CLI&lt;/strong&gt; as a coding assistant during the build. Think of it like a turbo-charged Stack Overflow that actually writes code snippets for you.  &lt;/p&gt;

&lt;p&gt;Did it make me faster? Absolutely. But don’t worry—I still had to architect everything, debug errors, and make sure it all worked together. AI didn’t do the hard thinking for me; it just helped me &lt;strong&gt;move quicker&lt;/strong&gt;.  &lt;/p&gt;




&lt;h2&gt;
  
  
  The Hardest Part of the Build
&lt;/h2&gt;

&lt;p&gt;The app came together surprisingly fast, but two areas gave me headaches:  &lt;/p&gt;

&lt;h3&gt;
  
  
  1. &lt;strong&gt;File Upload &amp;amp; Management&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Uploading audio is never fun. Large files, different formats, and the need for good UX made this tricky. Bytescale saved me from managing my own file storage (and from AWS S3 nightmares).  &lt;/p&gt;

&lt;h3&gt;
  
  
  2. &lt;strong&gt;Monetization&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Even though the platform is free right now, I wanted the infrastructure in place for a &lt;strong&gt;PRO plan&lt;/strong&gt; later on. Figuring out payment flows and Stripe integration while still working on core features was… let’s just say I drank a lot of coffee.  &lt;/p&gt;

&lt;p&gt;Everything else? Smooth sailing. The UI took some time (Tailwind always looks easier than it is), but nothing too crazy.  &lt;/p&gt;




&lt;h2&gt;
  
  
  Launching in 30 Days (Without Overthinking)
&lt;/h2&gt;

&lt;p&gt;By Day 30, I had:  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A working beta with core features
&lt;/li&gt;
&lt;li&gt;A clean(ish) UI that didn’t make me cringe
&lt;/li&gt;
&lt;li&gt;A landing page and basic branding
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Was it perfect?&lt;/strong&gt; Not even close.&lt;br&gt;&lt;br&gt;
But my goal wasn’t perfection—it was &lt;strong&gt;done&lt;/strong&gt;.  &lt;/p&gt;

&lt;p&gt;I deployed to &lt;strong&gt;Galaxy&lt;/strong&gt;, tested everything, and stepped back. It felt surreal: 30 days ago, this was just an idea in my notes. Now, it’s live.  &lt;/p&gt;




&lt;h2&gt;
  
  
  Where I’m At Right Now
&lt;/h2&gt;

&lt;p&gt;Here’s the honest truth:&lt;br&gt;&lt;br&gt;
&lt;strong&gt;Sounds Social is still in early beta. There are no users yet.&lt;/strong&gt;  &lt;/p&gt;

&lt;p&gt;I’m about to &lt;strong&gt;soft launch this week&lt;/strong&gt;, starting with:  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Posting on my personal network (I have around 50k followers as “Insan3Lik3” in the music scene)
&lt;/li&gt;
&lt;li&gt;DM’ing micro-producers (2k–20k followers) who might love the platform
&lt;/li&gt;
&lt;li&gt;Writing helpful content for &lt;strong&gt;dev.to&lt;/strong&gt; and the &lt;a href="https://sounds-social.ghost.io/" rel="noopener noreferrer"&gt;Sounds Social blog&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Sharing progress on social media (building in public)
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This is the stage where many projects die—after the build, before the growth. My mission now is to make sure that doesn’t happen.  &lt;/p&gt;




&lt;h2&gt;
  
  
  Lessons I’ve Learned So Far
&lt;/h2&gt;

&lt;p&gt;Even without thousands of users yet, building this in 30 days taught me more than the last year of “thinking about building something.”  &lt;/p&gt;

&lt;p&gt;Here are my biggest takeaways:  &lt;/p&gt;

&lt;h3&gt;
  
  
  1. &lt;strong&gt;Time Limits Are Superpowers&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;If I hadn’t set a 30-day deadline, I’d still be “planning” today. Constraints force action.  &lt;/p&gt;

&lt;h3&gt;
  
  
  2. &lt;strong&gt;Build Only What’s Essential&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Three features. That’s it. Everything else is a distraction at the MVP stage.  &lt;/p&gt;

&lt;h3&gt;
  
  
  3. &lt;strong&gt;UI Will Eat Your Time&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Tailwind is great, but design decisions take energy. Next time, I might use pre-built UI kits.  &lt;/p&gt;

&lt;h3&gt;
  
  
  4. &lt;strong&gt;Don’t Wait for Perfect&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;I launched with missing features and rough edges. And that’s okay. The goal is feedback, not perfection.  &lt;/p&gt;

&lt;h3&gt;
  
  
  5. &lt;strong&gt;Marketing Is a Whole New Game&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Building is easy compared to growth. If you think “launching” is the finish line, think again—it’s the starting point.  &lt;/p&gt;




&lt;h2&gt;
  
  
  What’s Next?
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Soft launch this week&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Start engaging micro-producers and indie musicians
&lt;/li&gt;
&lt;li&gt;Write more content about music production and indie hacking
&lt;/li&gt;
&lt;li&gt;Slowly improve the platform based on early feedback
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Long-term? I’d love for Sounds Social to become the go-to hub for producers to collaborate, share feedback, and maybe even monetize their skills. But for now, the goal is simple:&lt;br&gt;&lt;br&gt;
&lt;strong&gt;Get the first 100 users.&lt;/strong&gt;  &lt;/p&gt;




&lt;h2&gt;
  
  
  Final Thoughts
&lt;/h2&gt;

&lt;p&gt;If you’ve been sitting on an idea, waiting for the “perfect time,” consider this your sign:  &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Start now. Give yourself a deadline. Build small. Ship fast.&lt;/strong&gt;  &lt;/p&gt;

&lt;p&gt;You’ll learn more in 30 days of building than in 300 days of planning.  &lt;/p&gt;

&lt;p&gt;If you want to follow along (or join the beta when it’s ready), check out:&lt;br&gt;&lt;br&gt;
👉 &lt;a href="https://soundssocial.io" rel="noopener noreferrer"&gt;Sounds Social&lt;/a&gt;&lt;br&gt;&lt;br&gt;
👉 &lt;a href="https://github.com/sounds-social/platform" rel="noopener noreferrer"&gt;GitHub Repo&lt;/a&gt;  &lt;/p&gt;

&lt;p&gt;Thanks for reading! Got questions? Drop them in the comments. And if you’re building something too, share your journey—I’d love to see it. 🚀  &lt;/p&gt;

</description>
      <category>saas</category>
      <category>indiehackers</category>
      <category>webdev</category>
      <category>startup</category>
    </item>
    <item>
      <title>Why I Built Sounds Social with Meteor.js, React, Tailwind &amp; Bytescale</title>
      <dc:creator>Matteo De Micheli</dc:creator>
      <pubDate>Sat, 02 Aug 2025 16:28:34 +0000</pubDate>
      <link>https://dev.to/matteodem/why-i-built-sounds-social-with-meteorjs-react-tailwind-bytescale-4373</link>
      <guid>https://dev.to/matteodem/why-i-built-sounds-social-with-meteorjs-react-tailwind-bytescale-4373</guid>
      <description>&lt;p&gt;When I started building &lt;strong&gt;&lt;a href="https://soundssocial.io" rel="noopener noreferrer"&gt;Sounds Social&lt;/a&gt;&lt;/strong&gt;—a music platform where artists can upload and share their tracks—I faced an important decision: &lt;strong&gt;Which tech stack should I use to move fast, build something scalable, and deliver a modern user experience?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;This post explains &lt;strong&gt;why I chose Meteor.js for the backend, React for the frontend, Tailwind for styling, and Bytescale for media storage&lt;/strong&gt;, and why this combination works so well for a project like Sounds Social.&lt;/p&gt;




&lt;h2&gt;
  
  
  The Challenge
&lt;/h2&gt;

&lt;p&gt;Building a music platform isn’t just about uploading audio. It’s about &lt;strong&gt;real-time interactions&lt;/strong&gt;, a &lt;strong&gt;smooth user experience&lt;/strong&gt;, and &lt;strong&gt;reliable file handling&lt;/strong&gt;. Artists expect instant feedback when uploading tracks, and listeners want a responsive UI that feels like a modern app.&lt;/p&gt;

&lt;p&gt;I needed:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Fast development&lt;/strong&gt; without reinventing the wheel.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Built-in real-time features&lt;/strong&gt; for feeds, likes, and follows.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;A clean, responsive design system&lt;/strong&gt; that’s easy to maintain.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Scalable file storage&lt;/strong&gt; for potentially thousands of audio files.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;After evaluating several options, here’s why I landed on this stack.&lt;/p&gt;




&lt;h2&gt;
  
  
  Why Meteor.js?
&lt;/h2&gt;

&lt;p&gt;Meteor.js is not as hyped as it once was, but for building a feature-rich, real-time platform &lt;strong&gt;fast&lt;/strong&gt;, it’s still one of the best tools out there. Here’s why:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Real-time reactivity out of the box&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
No need to configure WebSockets or polling. When a user uploads a track, it appears in everyone’s feed instantly.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Unified full-stack environment&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Backend and frontend share the same language (JavaScript), which makes development much faster. No context switching.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Built-in authentication&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Meteor’s &lt;code&gt;accounts&lt;/code&gt; system allowed me to implement signup, login, and user profiles with minimal effort.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Publication/Subscription model&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Fine-grained control over what data gets sent to the client, without writing a ton of boilerplate.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For a platform like Sounds Social, where users upload tracks, like them, and interact in real time, this was a no-brainer.&lt;/p&gt;




&lt;h2&gt;
  
  
  Why React?
&lt;/h2&gt;

&lt;p&gt;I wanted a modern, component-based UI that’s easy to maintain and extend. React checked all the boxes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Component-driven architecture&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Perfect for building reusable UI pieces like track cards, upload forms, and player components.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Massive ecosystem&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Libraries for routing, forms, and animations are just a &lt;code&gt;npm install&lt;/code&gt; away.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Easy integration with Meteor&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Using &lt;code&gt;useTracker&lt;/code&gt; from &lt;code&gt;meteor/react-meteor-data&lt;/code&gt;, I connected Meteor’s reactive data sources directly to React components with minimal boilerplate.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;React makes the front end feel &lt;strong&gt;snappy and modular&lt;/strong&gt;, which is essential for a platform that should look and feel like a native app.&lt;/p&gt;




&lt;h2&gt;
  
  
  Why Tailwind CSS?
&lt;/h2&gt;

&lt;p&gt;I’ve used various CSS frameworks, but Tailwind stood out for this project because:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Rapid prototyping&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Utility classes let me build and iterate UI components quickly.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Consistency&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
No need to write custom CSS for every element. Tailwind enforces a consistent design system out of the box.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Responsive by default&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Mobile-first design is critical for Sounds Social since many users will access it on their phones.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Result? A modern, clean interface that looks great on both desktop and mobile, without spending weeks fine-tuning CSS.&lt;/p&gt;




&lt;h2&gt;
  
  
  Why Bytescale?
&lt;/h2&gt;

&lt;p&gt;Handling media is often the trickiest part of a music platform. Instead of managing uploads and storage manually, I used &lt;strong&gt;Bytescale&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Secure and scalable file handling&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Bytescale manages file uploads and delivery through their API, which is far more reliable than self-hosted solutions for a growing app.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;CDN integration&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Tracks and cover images load fast, no matter where the user is.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Developer-friendly&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Great documentation and easy integration with both client and server.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This freed me from worrying about storage limits or building a custom upload pipeline.&lt;/p&gt;




&lt;h2&gt;
  
  
  Final Thoughts
&lt;/h2&gt;

&lt;p&gt;The combination of &lt;strong&gt;Meteor.js, React, Tailwind, and Bytescale&lt;/strong&gt; gave me exactly what I needed: &lt;strong&gt;speed, flexibility, and scalability&lt;/strong&gt;. Meteor handles real-time updates seamlessly, React powers a modern UI, Tailwind speeds up design, and Bytescale takes care of file storage without headaches.&lt;/p&gt;

&lt;p&gt;If you’re building a platform that needs real-time features and handles media uploads, this stack is worth considering.&lt;/p&gt;




&lt;h3&gt;
  
  
  Explore the Project
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Live App&lt;/strong&gt;: &lt;a href="https://soundssocial.io" rel="noopener noreferrer"&gt;https://soundssocial.io&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Source Code&lt;/strong&gt;: &lt;a href="https://github.com/sounds-social/platform" rel="noopener noreferrer"&gt;https://github.com/sounds-social/platform&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;&lt;em&gt;What do you think about using Meteor in 2025? Would you choose this stack for your next project? Let me know in the comments!&lt;/em&gt;&lt;/p&gt;

</description>
      <category>javascript</category>
      <category>react</category>
      <category>meteor</category>
      <category>opensource</category>
    </item>
    <item>
      <title>Introducing Sounds Social - A new platform to share and discover music &amp; sounds 🔊</title>
      <dc:creator>Matteo De Micheli</dc:creator>
      <pubDate>Tue, 15 Jul 2025 16:09:00 +0000</pubDate>
      <link>https://dev.to/matteodem/introducing-sounds-social-a-new-platform-to-share-and-discover-music-sounds-1ee9</link>
      <guid>https://dev.to/matteodem/introducing-sounds-social-a-new-platform-to-share-and-discover-music-sounds-1ee9</guid>
      <description>&lt;p&gt;Hey DEV.to community&lt;/p&gt;

&lt;p&gt;I've been working on a music platform these past few weeks and thought why not share it with the DEV.to commmunity and get some feedback (suggestions, bug reports etc.).&lt;/p&gt;

&lt;p&gt;One cool thing about the platform is that most of it is written by Gemini CLI. This means I went from coding most of the time to more of an overseer role that manages and reviews the code being produced. It's really been quite a positive experience developing a new app like this.&lt;/p&gt;

&lt;p&gt;Anyways, here’s the link to check it out: &lt;a href="https://soundssocial.io/" rel="noopener noreferrer"&gt;https://soundssocial.io/&lt;/a&gt; and the about page with more info: &lt;a href="https://soundssocial.io/about" rel="noopener noreferrer"&gt;https://soundssocial.io/about&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The platform is &lt;a href="https://github.com/sounds-social/platform" rel="noopener noreferrer"&gt;open source&lt;/a&gt; btw. &lt;/p&gt;

&lt;p&gt;Thanks for giving it a try! &lt;/p&gt;

</description>
      <category>soundssocial</category>
      <category>platform</category>
      <category>introduction</category>
      <category>opensource</category>
    </item>
    <item>
      <title>My new favorite CMS: Kirby</title>
      <dc:creator>Matteo De Micheli</dc:creator>
      <pubDate>Fri, 08 Nov 2019 16:30:27 +0000</pubDate>
      <link>https://dev.to/matteodem/my-new-favorite-cms-kirby-583j</link>
      <guid>https://dev.to/matteodem/my-new-favorite-cms-kirby-583j</guid>
      <description>&lt;p&gt;My &lt;a href="http://www.demicheliservices.com/"&gt;business website&lt;/a&gt; is made with &lt;a href="https://getkirby.com/"&gt;Kirby&lt;/a&gt;. I'm skeptical about Content Management Systems after using Drupal 8 and Wordpress. These big(ger) systems have grown organically over the years and a lot of bloat and inconsistencies that are noticeable and make things unnecessarily complicated.&lt;/p&gt;

&lt;p&gt;After these past few days I can confidently say that Kirby is &lt;strong&gt;awesome&lt;/strong&gt;. The community and ecosystem are not that big but there's a lot of thought that went into the developer experience. For example enabling the website to be multilingual is as easy as adjusting the config file like this.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight php"&gt;&lt;code&gt;&lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
    &lt;span class="s1"&gt;'languages'&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="s1"&gt;'languages.detect'&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="p"&gt;];&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;No bloat, no weird API. Definitely worth paying for. Sometimes it's a bit magical but reading the source code is always an option. If you haven't tried it yet, here's my recommendation to check it out.&lt;/p&gt;

</description>
      <category>cms</category>
      <category>coding</category>
      <category>kirby</category>
      <category>php</category>
    </item>
    <item>
      <title>Extreme Reusability with Functional Programming &amp; Lodash</title>
      <dc:creator>Matteo De Micheli</dc:creator>
      <pubDate>Tue, 05 Nov 2019 11:09:04 +0000</pubDate>
      <link>https://dev.to/matteodem/extreme-reusability-with-functional-programming-lodash-2kah</link>
      <guid>https://dev.to/matteodem/extreme-reusability-with-functional-programming-lodash-2kah</guid>
      <description>&lt;p&gt;There's many ways that people write code. While every coding style has its own strengths &amp;amp; weaknesses, all priotize that the code is &lt;strong&gt;reusable, testable, readable and functional (works)&lt;/strong&gt;.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;flow&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;map&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="kd"&gt;get&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;add&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;reduce&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;lodash/fp&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;getScore&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kd"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;score&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;countUserScores&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;flow&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
  &lt;span class="nx"&gt;map&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;getScore&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
  &lt;span class="nx"&gt;reduce&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;add&lt;/span&gt;&lt;span class="p"&gt;)(&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;The code above is not only extremely reusable (composed functions) but also elegant. It takes an array of user objects with a score and counts them.&lt;/p&gt;

&lt;p&gt;Over the course of my professional career I've come to appreciate the simple nature of functional programming and the inherent testability (no side effects).&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Further reading:&lt;/em&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/lodash/lodash/wiki/FP-Guide"&gt;Lodash FP Guide&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://blog.codeminer42.com/functional-programming-with-lodash-fp-8fe0619b3024"&gt;Functional Programming with Lodash/FP by Paulo Diovani&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://codingwithjs.rocks/blog/lodash-fp-usage-retrospective"&gt;Lodash FP usage retrospective by Jordi Sicart&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>javascript</category>
      <category>functional</category>
      <category>coding</category>
      <category>lodash</category>
    </item>
  </channel>
</rss>
