stefanos.dev

About

Schedul: Our Journey So Far and How We’re Shaping It Into a Profitable Side Project

Cover Image for Schedul: Our Journey So Far and How We’re Shaping It Into a Profitable Side Project
10 min read3012 words

Building a side project alongside a full-time job is equal parts exhilarating and challenging. Schedul began as a simple idea to streamline social media scheduling, and over time it has evolved into a living experiment in product development, user validation, and monetization. In this post, I’ll share our story—from the initial spark to the strategies that have nudged Schedul toward profitability—so fellow makers can learn from our wins, missteps, and ongoing plans.

Of course, as is often the case, Kostas has deeper expertise in monetization, marketing, and all the things that bring in the “green friend.” Still, I’ll do my best to share my perspective with you.

Why Schedul Exists

It’s April 2024, and Threads has just announced the release of its API. Without hesitation, Kostas drops everything to start building a new product around it—originally envisioned as a simple tool for scheduling Threads posts. That’s how Schedul was born: a scheduling tool for social media managers focused on Threads.

But from the beginning, it was clear Schedul was meant for something bigger.

As days, weeks, and months passed, both we and the product grew. We scaled alongside Schedul, seizing new opportunities—and yes, making our fair share of mistakes too. But as the saying goes, “When life gives you lemons, make lemonade.”

Our Tech Stack: Fast to Build, Ready to Scale

When starting Schedul, we needed a stack that supported rapid prototyping without locking us into something brittle. After exploring a few options, we landed on Next.js—a framework that allowed us to move quickly while covering both the frontend and backend in a unified setup.

As the project grew, we adopted a monorepo architecture using Turborepo, which gave us a clean way to manage shared logic, type safety, and utilities across our workspaces. If you're building even moderately complex products, we highly recommend going monorepo early—it makes code sharing, testing, and deployment far more manageable.

Here’s a closer look at the stack powering Schedul:

  • Next.js with Tailwind CSS for a fast, composable UI and server-side rendering when needed.
  • Trigger.dev for orchestrating background jobs and scheduling tasks—critical for handling things like publishing posts at the right time.
  • PostgreSQL via Neon as our primary database, using Prisma ORM for type-safe, clean database interactions.
  • Redis, provided by Upstash, for caching and queues that keep things snappy under load.
  • Vercel as our hosting provider, giving us seamless deployments, edge functions, and tight integration with our Next.js codebase.
  • PostHog to track metrics, feature usage, and A/B tests with built-in support for feature flags.

This setup has allowed us to ship fast, iterate confidently, and maintain performance at scale—without compromising on developer experience. As a side project built during late nights and weekends, having a stack we can rely on made all the difference.

Validating Early

Before investing heavily in development, we built a simple landing page to explain Schedul’s value proposition. With no invite system or waitlist—just open access and a free plan for the first two months—we were pleasantly surprised to gain our very first users almost immediately.

In a short period, Schedul started attracting a healthy number of users—primarily agencies and social media managers who were early adopters of Threads. They were looking for a reliable, fast solution to schedule and manage multiple accounts, and Schedul fit that need well.

Within just two months, we had collected a substantial list of email subscribers and began conducting informal interviews with active users. Here are some of the key insights we gathered:

  • Users loved the simplicity but wanted more transparency around data privacy and security.
  • Several requested integrations with other platforms like X (formerly Twitter) and LinkedIn to expand their reach.
  • Many emphasized the importance of mobile-friendly flows, especially for on-the-go scheduling and approvals.

These insights helped shape our immediate roadmap:

  • We clarified how we handle user data in our onboarding and settings UI.
  • We made mobile responsiveness a core design requirement.
  • And we began exploring future integrations while making sure not to overextend too early.

This early feedback loop was invaluable—not only in shaping the product but in building trust with our user base from day one.

The Early Rise of Profit — and Our First Big Mistake

After running on a free plan for the first two months, we finally introduced pricing using LemonSqueezy as our payment provider. And that’s where we hit our first real bump.

Lesson learned: choose your payment provider wisely.

LemonSqueezy is a fantastic tool, especially if you want a Merchant of Record (MoR) setup. But for our subscription-based product, it didn’t quite fit. We ran into issues with failed payment retries, delayed refunds, and other edge cases that frustrated our early customers—and us.

The bright side? We recognized the problem early and migrated to Stripe in less than a month.

Despite the payment hiccups, signups kept rising, and so did our Monthly Recurring Revenue (MRR). Users started giving us real feedback—about performance slowdowns (don't forget to pay Vercel that 20 dollar bill), bugs, and small but important feature requests. We made it a priority to respond fast.

We pushed hotfixes in days, sometimes hours, to show early adopters that we cared. One good example: our onboarding flow. It went through multiple iterations, and thanks to the feedback loop, it’s now powered by our custom stepper logic—far more intuitive and user-friendly.

So there we were—two guys, excited by growing revenue, fast-paced shipping, and the thrill of building something people actually used.

Everything was going great…

At least, until December.

The Downhill Phase — and How We Tackled It

Then came December.

Threads updated its algorithm and post display logic, which heavily impacted visibility and engagement across the platform. What followed was a slow but steady wave of churn. Users were leaving, and at first, we didn’t fully understand why.

Sure, the policy change from Threads played a part—but it wasn’t the only issue.

Looking deeper, we realized there were other cracks in the foundation:

  • Our feature set was limited compared to competitors.
  • Our pricing plans may not have made sense for all user segments.
  • Our marketing approach wasn’t converting as effectively as before.

We tried different experiments—some worked, most didn’t—but the real breakthrough came from a new community we stared: the Greek Bootstrappers. That group turned out to be a goldmine of ideas, real talk, and support. One suggestion, in particular, stood out:

Add a user cancellation flow.

It sounds so simple in hindsight, but it was something we had ignored early on. If users cancel and you never ask why—when will you ever find out?

So, we added a quick, in-app cancellation feedback form. And just like that, insights started pouring in. Some users wanted more platform integrations. Others felt pricing was confusing. A few simply didn’t see the value yet.

We took the feedback seriously:

  • We added new platform support: first Bluesky, then X, then LinkedIn, and more to come.
  • We even tested a shift in positioning—from a Threads-first tool to a community-driven scheduler, with plans to support Slack, Discord, and other team-centric platforms.
  • We gave our UI a complete refresh: modern components, fewer clicks, and a more minimal, focused layout.

But the most impactful change?

We scrapped our old landing page and rebuilt it from scratch—clearer messaging, tighter positioning, and better conversion flow. We launched the new site alongside a Free Trial option across all pricing plans.

That combo helped us regain momentum and finally stabilized our user base.

But… how exactly did we manage to offer a free trial without drowning in costs or abuse?

Finding the Right Monetization Strategy

From early on, we knew that for Schedul to be sustainable—as a side project with serious potential—we needed a solid monetization strategy. We explored several models:

  • Freemium with premium tiers: Offering basic scheduling for free, while gating advanced functionality behind paid plans.
  • Straight subscription model: Charging from day one after a trial period.
  • Usage-based billing: Pricing tied to number of scheduled posts or connected accounts.
  • Partnerships/affiliate: Exploring bundling or co-marketing with social media tools or agencies.

We started out with three paid plans—Creator, Pro, and Scaler—but quickly realized that the tier names and feature splits weren't aligned with how users actually grew on the platform. After user feedback and analyzing upgrade behavior, we restructured to Pro, Scaler, and Max tiers, with clearer differentiation.

Eventually, we also introduced an Enterprise plan for larger teams or agencies needing custom integrations, SLAs, and onboarding support.

One key change that helped both monetization and system stability was implementing rate limits on scheduled posts. Each plan now has a cap—fair, clearly communicated, and tied directly to usage needs. This helped align value with pricing and nudged high-volume users toward appropriate plans.

As of today, we offer a Free Trial across all tiers to reduce friction and help users experience the product’s full value before committing. Conversion data has shown encouraging results, and we continue to experiment with pricing page copy, onboarding flows, and feature packaging to further improve upgrades.

Schedul isn’t just profitable—it covers all infrastructure and operational costs, with enough margin to reinvest in growth and support. That’s a huge win for a weekend-built product that started with a single API announcement.

Growth Tactics & Marketing

Growing Schedul beyond the initial wave of early adopters has required a mix of scrappy experimentation and genuine connection. Here's what has worked for us so far:

  1. Content Marketing

    We’ve published blog posts around real-world scheduling challenges—like “How to Boost Engagement on Threads” or “The Pros and Cons of Cross-Posting Across Platforms.” These articles not only drive organic search traffic but also position Schedul as a helpful tool in solving day-to-day social media headaches.

  2. Social Media Engagement

    We regularly post on platforms like X and LinkedIn, sharing lessons from both the technical side (e.g., optimizing our post queue system) and the founder journey (e.g., building a profitable side project while working full-time). Visual content like demo GIFs or short feature walkthroughs consistently draws attention—and often leads to direct signups.

  3. Community Participation

    Whether it’s Indie Hackers, Reddit, or other maker communities, we try to provide helpful answers in conversations about scheduling tools, bootstrapping, or product growth. When it fits naturally, we suggest Schedul as a solution—not with a sales pitch, but with empathy and real context.

  4. Word of Mouth via Live Chat Support

    Without a doubt, our biggest growth lever has been word of mouth. And the unexpected driver behind it? Our live chat support.

    By treating support as a conversation rather than a ticket system, we’ve built real trust with users—helping them fix small bugs, guiding them through workflows, and just being there when needed.

    In return, they’ve shared Schedul in their private communities—on Telegram, Discord, Viber, and even closed agency Slack groups. Some of our best testimonials came from these one-on-one chats that turned into advocacy.

Balancing Schedul with Full-Time Work

Keeping Schedul moving forward while working full-time has been one of our biggest challenges—but also one of the most rewarding. It requires structure, intention, and the ability to say “no” often. Here’s how we make it work:

  • Time-blocking with Boundaries

    We set aside specific time slots—usually two weeknights and a chunk of the weekend—exclusively for Schedul. Whether it's coding, marketing, or support, these focused sessions help us stay consistent without letting work creep into personal downtime.

  • Prioritization & Weekly Planning

    Our backlog lives in Notion and Linear, but what really helps us stay aligned and motivated is our podcast, 42 Minutes of SaaS. Each episode doubles as a kind of casual retrospective and planning session. It gives us space to reflect, debate, and plan for the week ahead.

  • Batching Similar Tasks

    We group similar tasks—like writing marketing copy, fixing bugs, or responding to user questions—into focused blocks. This reduces context switching and makes our limited time much more productive.

  • Automation Where It Matters

    We rely on tools like Loops to automate repetitive tasks—onboarding emails, billing reminders, and error alerts. This gives us more time to focus on what matters: building and supporting the product.

  • Avoiding Burnout by Design

    We deliberately schedule off days where Schedul gets zero attention. And when motivation dips, we revisit feedback from happy users or remind ourselves of small wins—like our first paying customer or a kind message in live chat. That always helps rekindle the spark.

This system has helped us strike a balance: making meaningful progress without letting Schedul consume our lives. It’s not always perfect, but it’s sustainable—and it keeps the fire alive.

Technical & UX Learnings

As Schedul evolved, we encountered (and solved) numerous UX and technical challenges that shaped the product into what it is today. Here are some of the key lessons we’ve learned along the way:

  • Performance Optimization

    In the early days, users often reported delays when syncing calendars or loading the dashboard. These issues affected overall engagement and trust. We addressed them by implementing lazy loading, optimizing PostgreSQL queries via Prisma, and caching frequent API responses using Redis. The improvements were immediate and noticeable.

  • Simplifying Onboarding

    Our initial multi-step onboarding flow was too complex and caused drop-offs. After several iterations—guided by user feedback and session analytics—we simplified the process and made each step more explanatory. The result? A 60% increase in onboarding completion rates.

  • PostHog Session Replays

    One of the most insightful tools we adopted was PostHog. Watching session replays gave us a front-row seat to user confusion—seeing exactly where people hesitated or got stuck. These insights directly influenced design tweaks, onboarding improvements, and error handling.

  • Mobile Responsiveness

    A large share of usage—especially from agency users—came via mobile. Prototyping early for smaller screens helped us identify layout issues and prioritize clean, responsive UI components. Mobile-friendliness became non-negotiable.

  • Simplified User Flow

    We trimmed down the interface to focus on just two key views: Compose and Calendar. These are the heart of Schedul, and by keeping them minimal, fast, and intuitive, we reduced friction and improved task completion across the board.

  • Scalability & Platform Shift

    Initially, Schedul was built solely for Threads. But we quickly realized we needed to future-proof it. We refactored the architecture to support multiple social platforms, introduced a monorepo setup with Turborepo, and made the product more flexible for future integrations—like X, Bluesky, and LinkedIn. This pivot allowed us to serve a broader audience and remain resilient as the landscape shifted.

Advice for Fellow Side-Project Builders

If you're building a side project like we did with Schedul, here are some of the most valuable lessons we've picked up along the way:

  1. Validate Early and Often

    Don’t wait until the product is "ready" to show it to people. A basic landing page, quick mockups, or a short survey can help you test demand and avoid wasting time building something no one needs.

  2. Keep the Scope Lean

    It’s easy to fall into the “just one more feature” trap (trust us—we’ve been there). Focus on the single most important problem you're solving, and deliver the cleanest, simplest version of that first.

  3. Measure What Matters

    Pick a few meaningful metrics—like activation rate, retention, or conversion—and track them closely. These numbers guide better decisions than gut instinct alone. (I can almost hear Kostas saying this as I type.)

  4. Build in Public (If It Fits You)

    Sharing your journey on social media or a podcast (like 42 Minutes of SaaS) can attract early fans, honest feedback, and some accountability. But do it only if it energizes you—not out of pressure.

  5. Automate & Outsource Smartly

    Automate what you can: onboarding flows, billing alerts, error logging. And when you can afford it, outsource things like design or copywriting that aren’t your strength—it’ll save time and level up your product faster.

  6. Iterate Quickly on Feedback

    Early users are gold. Listen to them, fix their pain points fast, and let them know when you've shipped improvements. This builds loyalty and trust.

  7. Maintain Work-Life Balance

    Burnout is real. Set boundaries for your side project and stick to them. Celebrate small wins—like your first paying customer or a happy support message—to stay motivated through the ups and downs.

  8. Plan for Sustainability

    Side projects take time to become profitable. Treat it as a marathon, not a sprint. Stay flexible, keep learning, and adapt based on real usage and real feedback—not assumptions.


Closing Thoughts

The journey of building Schedul as a side project has been full of lessons—across product design, user empathy, marketing, and managing time as part-time founders. While meaningful revenue takes time and persistence, the skills we've built, the relationships we've formed, and the confidence we've gained have been just as valuable.

If you're starting your own side-project adventure: start small, validate early, focus on solving real problems, and most importantly, enjoy the process. Share your wins and struggles along the way—you'll be surprised how much support you’ll find in the community, and how much you can give back in return.

Here’s to the road ahead 🚀