<?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: Sithija Seneviratne</title>
    <description>The latest articles on DEV Community by Sithija Seneviratne (@sithijaseneviratne).</description>
    <link>https://dev.to/sithijaseneviratne</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%2F4175588%2F756b2c40-825f-4906-99d5-ff6c9e76495e.png</url>
      <title>DEV Community: Sithija Seneviratne</title>
      <link>https://dev.to/sithijaseneviratne</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/sithijaseneviratne"/>
    <language>en</language>
    <item>
      <title>The most expensive task manager for a side hustle is the one in your HEAD!!!</title>
      <dc:creator>Sithija Seneviratne</dc:creator>
      <pubDate>Thu, 15 Oct 2026 13:08:22 +0000</pubDate>
      <link>https://dev.to/sithijaseneviratne/the-most-expensive-task-manager-for-a-side-hustle-is-the-one-in-your-head-31h9</link>
      <guid>https://dev.to/sithijaseneviratne/the-most-expensive-task-manager-for-a-side-hustle-is-the-one-in-your-head-31h9</guid>
      <description>&lt;p&gt;&lt;em&gt;This is a submission for the &lt;a href="https://dev.to/challenges/hacktoberfest-week2-2026-10-12"&gt;Hacktoberfest Open-Source AI Challenge Week 2: Side Hustle&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  What I Built
&lt;/h2&gt;

&lt;p&gt;You finish a client call, open WhatsApp, and type:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;“Sure, I’ll send the updated menu tomorrow by 4.”&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Then another client messages on another channel or in another conversation. Someone asks for a quote. Someone else promises to send the product photos. Three conversations later, those menu deadlines and tasks are forgotten. Typically, you manually note everything down, one by one, but when you’re running a side hustle, it’s really hard to keep track of it all, all the time.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;I built ScheduleUp to turn WhatsApp and Telegram conversation commitments and deadlines automatically to into a task timeline with notes without having to worry doing  each manually or keep track.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The intended customer is a solo designer, developer, consultant, or small service-business owner who coordinates work through chat and keeps having to copy it into another tool.&lt;/p&gt;

&lt;p&gt;Here is the behavior I care about:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;What happens in chat&lt;/th&gt;
&lt;th&gt;What ScheduleUp should record&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;A client asks for an extra quote&lt;/td&gt;
&lt;td&gt;A request to review&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;The owner accepts the work&lt;/td&gt;
&lt;td&gt;An open owner task&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;The client promises to send photos&lt;/td&gt;
&lt;td&gt;A waiting task assigned to the client&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Both sides agree to a later deadline&lt;/td&gt;
&lt;td&gt;An updated task with supporting messages&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Work is explicitly completed or cancelled&lt;/td&gt;
&lt;td&gt;A historical record, removed from active work&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;ScheduleUp also provides editable reply drafts, reusable templates, internal reminders, and approved scheduled follow-ups. The owner reviews outgoing messages..&lt;/p&gt;

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


&lt;div class="crayons-card c-embed text-styles text-styles--secondary"&gt;
    &lt;div class="c-embed__content"&gt;
      &lt;div class="c-embed__body flex items-center justify-between"&gt;
        &lt;a href="https://scheduleup.tech/" rel="noopener noreferrer" class="c-link fw-bold flex items-center"&gt;
          &lt;span class="mr-2"&gt;scheduleup.tech&lt;/span&gt;
          

        &lt;/a&gt;
      &lt;/div&gt;
    &lt;/div&gt;
&lt;/div&gt;


&lt;p&gt;⚡ Hackathon Judges Fast-Pass: Click “Explore the simulated demo” on the sign-in screen to instantly explore pre-loaded sample conversations, tasks, and deadlines—no account or WhatsApp/Telegram connection needed!&lt;/p&gt;

&lt;p&gt;  &lt;iframe src="https://www.youtube.com/embed/BBVBgigOgeU" width="710" height="399"&gt;
  &lt;/iframe&gt;
&lt;/p&gt;

&lt;h2&gt;
  
  
  Code
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Repository: &lt;a href="https://github.com/Nivin-Sithija/Schedule-Up" rel="noopener noreferrer"&gt;Nivin-Sithija/Schedule-Up&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;To inspect the project and run its checks with Node.js 22:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git clone https://github.com/Nivin-Sithija/Schedule-Up.git
&lt;span class="nb"&gt;cd &lt;/span&gt;Schedule-Up
npm ci
npm &lt;span class="nb"&gt;test
&lt;/span&gt;npm run build
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  How I Built It
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Gemma interprets the conversation
&lt;/h3&gt;

&lt;p&gt;ScheduleUp uses &lt;strong&gt;Google's open-weight Gemma models through OpenRouter&lt;/strong&gt;, orchestrated by &lt;strong&gt;Mastra&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;The deployed primary model is &lt;code&gt;google/gemma-4-26b-a4b-it:free&lt;/code&gt;. It receives both sides of a permitted conversation, current tasks, relevant older context, and calendar information tied to each message.&lt;/p&gt;

&lt;p&gt;It proposes structured changes and create, update, complete, or cancel a task.&lt;/p&gt;

&lt;p&gt;The application then checks the schema, evidence, responsibility, dates, and task revisions before accepting a change. Ambiguous requests and counteroffers can stay under review. Invalid output gets one repair attempt, followed by the same checks.&lt;/p&gt;

&lt;h3&gt;
  
  
  Remembering an agreement without replaying the entire inbox
&lt;/h3&gt;

&lt;p&gt;Older context lives in &lt;strong&gt;Tiger Data PostgreSQL&lt;/strong&gt;, using &lt;strong&gt;pgvector plus PostgreSQL full-text search&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;The app runs the quantized &lt;code&gt;Xenova/all-MiniLM-L6-v2&lt;/code&gt; embedding model through Hugging Face Transformers.js inside its own process. Keyword and vector results are combined to retrieve relevant older agreement references, scoped to the current workspace and client.&lt;/p&gt;

&lt;h3&gt;
  
  
  Follow-ups need a memory
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Temporal&lt;/strong&gt; coordinates conversation batches, analysis activities, reminders, and approved-send timers.&lt;/p&gt;

&lt;p&gt;An incoming permitted message becomes a durable workflow signal. Analysis runs in ordered batches. Scheduled follow-ups check the approved recipient, text, time, task revision, and conversation sequence before sending.&lt;/p&gt;

&lt;p&gt;New chat activity or task changes pause existing follow-up approvals. An uncertain delivery outcome needs inspection before retry; the app does not blindly send another copy.&lt;/p&gt;

&lt;p&gt;The pilot uses Temporal's development server with persistent SQLite storage. Hosted restart recovery still needs direct verification.&lt;/p&gt;

&lt;h3&gt;
  
  
  The deployed stack
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F92kx5xqgjx2rfewkctfs.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F92kx5xqgjx2rfewkctfs.png" alt="ScheduleUp architecture showing Render hosting, channel adapters, Temporal, Mastra, hosted Gemma inference, and Tiger Data storage" width="800" height="455"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Render is used to host the services. Tiger Data and OpenRouter are external dependencies.&lt;/p&gt;

&lt;p&gt;GitHub Actions runs build, test, dependency-audit, and container checks before deployment.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why Does Open Innovation Matter?
&lt;/h2&gt;

&lt;p&gt;For a side-hustle tool, AI needs to be affordable to use repeatedly and adaptable to real client conversations. Open components give ScheduleUp three concrete advantages:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Local conversation search:&lt;/strong&gt; An open embedding model runs inside the app to retrieve earlier agreements. No separate embedding API, per-request embedding charge, or additional provider receiving that text.&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Control over inference:&lt;/strong&gt; Gemma's open weights provide a route to customer-controlled inference. ScheduleUp includes an Ollama adapter, allowing the reasoning to move onto hardware the customer controls. This offers an alternative if hosted API pricing, availability, or privacy requirements change.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Editable agent behavior:&lt;/strong&gt; Mastra's open-source framework lets me inspect and modify extraction, repair, and drafting. Application rules check evidence and deadlines before accepting task changes.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  💸 LLM-call costs
&lt;/h3&gt;

&lt;p&gt;A conversation can trigger extraction, a repair attempt, and a requested reply draft—each a separate LLM call. With metered inference, those calls contribute to the cost of serving every customer.&lt;/p&gt;

&lt;h2&gt;
  
  
  My First User
&lt;/h2&gt;

&lt;p&gt;I tried ScheduleUp with my parents, who run a side hustle while keeping their jobs. They loved it. The next step is to learn which parts they keep using and whether that value supports a paid service.&lt;/p&gt;

&lt;h2&gt;
  
  
  Prize Categories
&lt;/h2&gt;

&lt;p&gt;I am entering the following &lt;a href="https://dev.to/challenges/hacktoberfest-week2-2026-10-12"&gt;official Week 2 partner categories&lt;/a&gt;:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Partner&lt;/th&gt;
&lt;th&gt;Category&lt;/th&gt;
&lt;th&gt;Its role in ScheduleUp&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Google Gemma&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;em&gt;Best Use of Gemma ($200)&lt;/em&gt;&lt;/td&gt;
&lt;td&gt;Interprets conversations, proposes task changes with source-message references, repairs invalid output, and drafts editable replies through hosted OpenRouter inference.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Mastra&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;em&gt;Best Use of Mastra ($100)&lt;/em&gt;&lt;/td&gt;
&lt;td&gt;Runs the extraction, repair, and drafting agents over Gemma, with controlled instructions and structured output requests.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Tiger Data&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;em&gt;Best Use of Tiger Data ($100)&lt;/em&gt;&lt;/td&gt;
&lt;td&gt;Stores workspace data and conversation embeddings in PostgreSQL; combines pgvector and full-text search to retrieve earlier agreement context.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Temporal&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;em&gt;Best Use of Temporal ($100)&lt;/em&gt;&lt;/td&gt;
&lt;td&gt;Coordinates durable conversation signals, analysis retries, reminders, and approved follow-up timers.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Render&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;em&gt;Best Use of Render ($200)&lt;/em&gt;&lt;/td&gt;
&lt;td&gt;Hosts the React/Fastify app with its embedded worker, plus private WAHA and Temporal services.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;GitHub&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;em&gt;Best Use of GitHub Copilot ($100)&lt;/em&gt;&lt;/td&gt;
&lt;td&gt;Used for coding tasks , mcp integrations, GitHub Actions checks builds, tests, dependencies, and containers before deploying a verified revision.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;.tech Domains&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;em&gt;Best Use of a .tech Domain ($100)&lt;/em&gt;&lt;/td&gt;
&lt;td&gt;Publishes the product and public simulated demo at &lt;a href="https://scheduleup.tech" rel="noopener noreferrer"&gt;scheduleup.tech&lt;/a&gt;, using a .tech domain claimed through the Hacktoberfest promotion.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h3&gt;
  
  
  More Follow-Through, Less Overhead
&lt;/h3&gt;

&lt;p&gt;Open-source AI isn't just about matching proprietary models on benchmark leaderboards. It is about &lt;strong&gt;giving a small business control over the cost and behavior of the tools it depends on.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;ScheduleUp combines open-weight reasoning, local conversation search, and editable agent workflows to turn client messages into commitments you can trace and manage. The business still needs pricing validation, but its core processing can evolve beyond a single hosted AI provider.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;My parents already have jobs and a side hustle. Remembering every client promise shouldn't have to be a third one.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;&lt;em&gt;Built using open-source tools, free services, and Hacktoberfest partner credits and promotional offers&lt;/em&gt;.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;&lt;em&gt;The code is 100% open-source under the MIT license.&lt;/em&gt;&lt;/em&gt;&lt;/p&gt;

</description>
      <category>devchallenge</category>
      <category>hf26challenge</category>
      <category>opensource</category>
      <category>automation</category>
    </item>
    <item>
      <title>ShadeWindow: A Little Shade. A Better Walk</title>
      <dc:creator>Sithija Seneviratne</dc:creator>
      <pubDate>Sat, 10 Oct 2026 19:20:32 +0000</pubDate>
      <link>https://dev.to/sithijaseneviratne/shadewindow-a-little-shade-a-better-walk-16en</link>
      <guid>https://dev.to/sithijaseneviratne/shadewindow-a-little-shade-a-better-walk-16en</guid>
      <description>&lt;p&gt;&lt;em&gt;This is a submission for the &lt;a href="https://dev.to/challenges/hacktoberfest-week1-2026-10-05"&gt;Hacktoberfest Open-Source AI Challenge Week 1: Touch Grass&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  What I Built
&lt;/h2&gt;

&lt;p&gt;A short walk sounds simple until you start deciding when to leave, how much sun you want, and whether there is somewhere to sit along the way.&lt;/p&gt;

&lt;p&gt;I built ShadeWindow, a local-AI walking planner around one question: When should I leave, and which walk will keep me in the shade?&lt;/p&gt;

&lt;p&gt;The idea is to make planning a small part of the experience. Describe your walk, compare a few options, save one card, and put the screen away.&lt;/p&gt;

&lt;p&gt;The experience has three steps:&lt;/p&gt;

&lt;p&gt;Plan. Choose a duration, departure window, pace, and preferences for shade, benches, and rain. You can also describe these to a local model.&lt;br&gt;
Compare. Explore three routes, their departure times, moving shadows, and score breakdowns.&lt;br&gt;
Save &amp;amp; go. Save a walk card in the browser, reopen it later, or print it.&lt;br&gt;
The moving-shade map is the central idea: a route that looks appealing now may have a different shade pattern by the time you reach its later segments.&lt;/p&gt;
&lt;h2&gt;
  
  
  Code
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://github.com/Nivin-Sithija/ShadeWindow" rel="noopener noreferrer"&gt;ShadeWindow on GitHub&lt;/a&gt;&lt;br&gt;
Application code is MIT licensed; SunCalc and model weights have their own licenses.&lt;/p&gt;
&lt;h2&gt;
  
  
  How I Built It
&lt;/h2&gt;
&lt;h3&gt;
  
  
  Moving shade from solar geometry
&lt;/h3&gt;

&lt;p&gt;The interface uses plain HTML, CSS, and JavaScript, with a small Node.js server. SunCalc supplies solar altitude and azimuth.&lt;/p&gt;

&lt;p&gt;For each sampled route point, the planner checks whether a ray toward the sun intersects a synthetic building. Tree canopies are approximated as opaque disks projected onto the ground. Unknown building heights remain uncertain.&lt;/p&gt;

&lt;p&gt;The calculation uses the time the walker reaches each part of the route. Benches are checked for shade at arrival, too.&lt;/p&gt;
&lt;h3&gt;
  
  
  Local AI with a bounded job
&lt;/h3&gt;

&lt;p&gt;The tested model is &lt;strong&gt;Llama 3.1 8B through Ollama&lt;/strong&gt;. The app can be configured for an installed Gemma model, but the recorded verification uses Llama.&lt;/p&gt;

&lt;p&gt;The model handles two tasks:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Written request
  → validated preferences
  → calculated feasible routes and departures
  → model selects an existing candidate
  → checked walk card
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Why Does Open Innovation Matter?
&lt;/h2&gt;

&lt;p&gt;Walking preferences can reveal parts of a person's routine. Local inference lets the default setup process those preferences on the user's machine without a paid cloud inference API.&lt;/p&gt;

&lt;p&gt;The prompts, validation rules, fixtures, and calculations are inspectable. A different compatible local model can be configured while the geometry and scoring rules stay reproducible.&lt;/p&gt;

&lt;p&gt;That separation makes the prototype easier to question and improve. Someone can change the shade approximation, review a score formula, or test another model without treating the recommendation as a black box.&lt;/p&gt;

&lt;p&gt;Open weights still come with model-specific licenses, and local inference still uses computing resources. Those boundaries belong alongside the benefits.&lt;/p&gt;

</description>
      <category>hacktoberfest</category>
      <category>devchallenge</category>
      <category>hf26challenge</category>
      <category>opensource</category>
    </item>
  </channel>
</rss>
