<?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: maitri-vv</title>
    <description>The latest articles on DEV Community by maitri-vv (@maitrivv).</description>
    <link>https://dev.to/maitrivv</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%2F947890%2F380489f2-46bf-4e28-89b8-67e27ed62f3e.png</url>
      <title>DEV Community: maitri-vv</title>
      <link>https://dev.to/maitrivv</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/maitrivv"/>
    <language>en</language>
    <item>
      <title>Pick For Us: I trained a small movie model to end the endless ‘you pick’ loop</title>
      <dc:creator>maitri-vv</dc:creator>
      <pubDate>Mon, 26 Oct 2026 06:45:13 +0000</pubDate>
      <link>https://dev.to/maitrivv/couch-watch-25co</link>
      <guid>https://dev.to/maitrivv/couch-watch-25co</guid>
      <description>&lt;p&gt;&lt;em&gt;This is a submission for the &lt;a href="https://dev.to/challenges/hacktoberfest-week3-2026-10-19"&gt;Hacktoberfest Open-Source AI Challenge Week 3: Slow and Steady&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

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

&lt;p&gt;A movie night has a surprisingly tedious opening scene.&lt;/p&gt;

&lt;p&gt;“Something good?”&lt;/p&gt;

&lt;p&gt;“Sure. You pick.”&lt;/p&gt;

&lt;p&gt;Forty thumbnails later, nobody has picked anything.&lt;/p&gt;

&lt;p&gt;I built Pick For Us around a small promise: reduce the work of choosing. It opens with an actual recommendation, asks for no uploads or account connections, and lets you add a few favorite films only if you want a more personal pick.&lt;/p&gt;

&lt;p&gt;There are two modes: Just me and Both of us. In the second, each person can tap up to five favorites. The app looks for a recommendation supported by both sets of taste signals and explains the connections separately.&lt;/p&gt;

&lt;p&gt;It presents one main pick, a small set of alternatives, and a “That's the one” button that lets you stop choosing. Genre filtering and “Seen it / next” are there when needed. There is no endless feed.&lt;/p&gt;

&lt;p&gt;The default works with no input. It uses community ratings with a support adjustment, so a film with a handful of glowing reviews does not automatically outrank a well-supported favorite.&lt;/p&gt;

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

&lt;p&gt;GitHub: &lt;a href="https://github.com/maitri-vv/pick-for-us" rel="noopener noreferrer"&gt;https://github.com/maitri-vv/pick-for-us&lt;/a&gt;&lt;br&gt;
Site: &lt;a href="https://maitri-vv.github.io/pick-for-us/" rel="noopener noreferrer"&gt;https://maitri-vv.github.io/pick-for-us/&lt;/a&gt;&lt;/p&gt;

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

&lt;p&gt;A real dataset and a model trained from scratch&lt;br&gt;
I used the MovieLens latest-small September 2018 snapshot, containing 100,836 ratings from 610 users across 9,742 source movies. After a training-only minimum-support filter, the application catalog contains 1,859 films.&lt;/p&gt;

&lt;p&gt;The model is based on EASE, a linear collaborative-filtering method. It learns how likes for one film help predict likes for others. NumPy fits its regularized closed-form solution; it is not an LLM prompt pretending to be a recommender.&lt;/p&gt;

&lt;p&gt;The training pipeline:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Sort each user's ratings by time and hold out their latest 20%.&lt;/li&gt;
&lt;li&gt;Build a binary interaction matrix from training ratings of four stars or higher.&lt;/li&gt;
&lt;li&gt;Fit EASE with regularization of 80 and a zero diagonal.&lt;/li&gt;
&lt;li&gt;Retain the largest 80 positive outgoing weights per movie and export them.&lt;/li&gt;
&lt;li&gt;Evaluate that exported sparse model, rather than a larger model that the app never serves.
The sparse positive truncation is my deployment adaptation of EASE. I did not tune its settings through a search over test-set results.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  What the tests actually showed
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Experiment&lt;/th&gt;
&lt;th&gt;Users&lt;/th&gt;
&lt;th&gt;Model Recall@10&lt;/th&gt;
&lt;th&gt;Baseline Recall@10&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Complete historical positive profile&lt;/td&gt;
&lt;td&gt;573&lt;/td&gt;
&lt;td&gt;11.030%&lt;/td&gt;
&lt;td&gt;6.097%, training popularity&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Five recent training likes, production scoring&lt;/td&gt;
&lt;td&gt;563&lt;/td&gt;
&lt;td&gt;9.822%&lt;/td&gt;
&lt;td&gt;4.845%, community quality&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Recall@10 measures how much of a user's held-out liked set appears in the top ten. It is not a probability of enjoyment, and I am not calling it “98% accuracy.”&lt;/p&gt;

&lt;p&gt;The second experiment is closer to the interface: it uses only five likes and the same single-person scoring formula served by the backend. However, the evaluator still excludes all previously rated training films, which a genuinely new visitor has not supplied. Real onboarding performance still needs a user study.&lt;/p&gt;

&lt;p&gt;There are other limits. The split is chronological per user, not one global date cutoff. The catalog is historical and leans toward English-language films. These are development-snapshot experiments, not a claim of state-of-the-art research results.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How the two-person decision works&lt;/strong&gt;&lt;br&gt;
Each person gets an affinity score derived from learned weights. After normalization, the shared score combines 65% of the weaker affinity with 35% of the pair's average, plus a small community-quality component.&lt;/p&gt;

&lt;p&gt;That means a very strong signal for one person cannot completely erase a weak signal for the other. It is a transparent product rule—not a learned or user-validated guarantee of fairness. The interface shows each person's relative affinity and the selected favorites contributing positive learned weights.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Frontend and backend&lt;/strong&gt;&lt;br&gt;
React handles the responsive interface. The backend exposes catalog search, recommendation scoring, and evaluation metadata. The hosted app uses Vinext on a server runtime; the downloadable package is a standard Next.js project with the same frontend, handlers, and learned model.&lt;/p&gt;

&lt;p&gt;The trained weights ship with the backend. There are no model-service keys, streaming-account integrations, user uploads, or GPU requirements. User-selected IDs are sent to this server for scoring; the app does not intentionally persist a personal profile.&lt;/p&gt;

&lt;p&gt;Twelve checks exercise the actual recommendation handler and model, including invalid input, seen-film exclusion, genre filtering, and two-person symmetry. Browser checks verify the complete selection-to-result flow and the mobile layout. ChatGPT/Codex assisted the implementation and testing.&lt;/p&gt;

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

&lt;p&gt;A small, inspectable model is enough for this job. I can show how the coefficients were learned, rerun training, compare against baselines, and explain the serving formula without outsourcing the decision to a proprietary chat API.&lt;/p&gt;

&lt;p&gt;The distinction between open application code and data permissions matters: my application code is MIT-licensed, while the MovieLens-derived artifacts retain GroupLens's research-use terms. This is a non-commercial research demo; a commercial product would need suitable permission or a different dataset.&lt;/p&gt;

&lt;p&gt;The app does not know current streaming availability, age suitability, or recent releases. Its poster-like cards are original typographic graphics, not official film artwork. It links to IMDb so visitors can inspect details before deciding.&lt;/p&gt;

&lt;p&gt;I haven't measured minutes saved. The product's “Slow and Steady” contribution is the workflow: arrive with nothing, optionally offer a few tastes, get one grounded suggestion, and give yourself permission to stop scrolling.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;em&gt;Credits&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;F. Maxwell Harper and Joseph A. Konstan, The MovieLens Datasets: History and Context, 2015. Dataset and terms. No endorsement by GroupLens or the University of Minnesota is implied.&lt;/li&gt;
&lt;li&gt;Harald Steck, Embarrassingly Shallow Autoencoders for Sparse Data, 2019.&lt;/li&gt;
&lt;li&gt;NumPy, SciPy, React, Next.js, Vinext, and their contributors.&lt;/li&gt;
&lt;li&gt;DM Sans and Manrope through Google Fonts.
The original dataset download was unavailable during the build, so training files were obtained from the smanihwr/ml-latest-small mirror. File hashes and the original data terms are included for provenance.&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>devchallenge</category>
      <category>hf26challenge</category>
      <category>opensource</category>
      <category>machinelearning</category>
    </item>
    <item>
      <title>Hearth-Describe a workspace. Preview the rooms. Create them in Notion.</title>
      <dc:creator>maitri-vv</dc:creator>
      <pubDate>Mon, 19 Oct 2026 06:55:35 +0000</pubDate>
      <link>https://dev.to/maitrivv/notion-guide-gemma-helps-you-create-notion-template-as-per-your-vibe-2mm6</link>
      <guid>https://dev.to/maitrivv/notion-guide-gemma-helps-you-create-notion-template-as-per-your-vibe-2mm6</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;A person writes one sentence. Hearth designs the pages, databases, properties, and views, shows the result before anything is written, then builds the parts the public Notion API can create. Whatever the API cannot do is returned as a short companion: exact clicks, in order, on the right page.&lt;/p&gt;

&lt;h2&gt;
  
  
  The problem
&lt;/h2&gt;

&lt;p&gt;Notion is generous and easy to get lost in. A new workspace starts as a blank page. The useful structure — a home page, a database per kind of work, a status, a due date, a board, a calendar, a relation between them — takes a long time to assemble, and most people stop halfway. They end up with one table and a dozen loose notes.&lt;/p&gt;

&lt;p&gt;Templates exist, but a template is someone else’s life. A student, a studio, and a household do not want the same columns. They want the shape of their sentence.&lt;/p&gt;

&lt;p&gt;The missing step is the one in between: turn a description into a design, let the person look at it, then create only what Notion will actually accept.&lt;/p&gt;

&lt;h2&gt;
  
  
  Who it is for
&lt;/h2&gt;

&lt;p&gt;Anyone who can describe the room they need and has a Notion account. The first version is aimed at a single person on a free workspace: a student setting up a term, a researcher setting up a desk, a small studio setting up clients and a calendar. It is not a team installer and it does not ask for an admin.&lt;/p&gt;

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

&lt;p&gt;Hearth is a web app with four moves.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Write a brief.&lt;/strong&gt; One box. A sentence or two is enough. Mood and job can sit in the same line.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Read the preview.&lt;/strong&gt; A sidebar of rooms, the page as it will read, the database as a board or a calendar, the colours, and a split between “this will be created” and “this stays by hand.”&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Rehearse.&lt;/strong&gt; The same builder runs against an in-memory Notion. Nothing in the real workspace changes. The log shows every page, view, and relation that would be sent.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Create.&lt;/strong&gt; A personal access token builds the workspace as that person. The token is used for the build and then forgotten. It is not stored.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;There is also a catalogue. Each row says one of three things: Notion offers this, Hearth creates this, or the person still does it by hand. Every row links to the official page it came from.&lt;/p&gt;

&lt;h2&gt;
  
  
  One example, all the way through
&lt;/h2&gt;

&lt;p&gt;This is the brief I kept on the desk while building:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Aesthetic + warm + rich. A student dashboard for assignments, revision and projects.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Hearth reads three decisions in that line.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The mood is warm and rich, so the palette is clay, cream, olive, and ink, and the workspace is named &lt;strong&gt;The Study&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;The job is a student dashboard, so the hub is &lt;strong&gt;Courses&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;The nouns are assignments, revision, and projects, so those become the other three databases.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The preview then shows a small house, not a pile of features.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Room&lt;/th&gt;
&lt;th&gt;What it is&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;The Study&lt;/td&gt;
&lt;td&gt;The front page. A short introduction, the list of rooms, and the colour note.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;This week&lt;/td&gt;
&lt;td&gt;Only what is due in the next seven days, plus live views of the databases.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Courses&lt;/td&gt;
&lt;td&gt;The term, named. Other databases point here.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Assignments&lt;/td&gt;
&lt;td&gt;A status, a due date, a type, an estimate in hours, and a course.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Revision&lt;/td&gt;
&lt;td&gt;A topic, a confidence, a method, and the next review date.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Projects&lt;/td&gt;
&lt;td&gt;Longer work, with the outcome written in one sentence.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;How this space works&lt;/td&gt;
&lt;td&gt;What was created, and the clicks that are still yours.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Assignments opens on a board grouped by status, and also has a calendar on Due. Starter rows are real enough to judge the design: Mechanism worksheet belongs to Organic Chemistry, and that link is a relation, not a name typed into a text field. Three rows per database. Enough to see the board. Few enough to delete.&lt;/p&gt;

&lt;p&gt;The companion does not say “set up automations.” It says: open Assignments, add one automation, trigger it when Status becomes Done, and write today’s date into Completed. Same tone for the cover, the reminder on Due, and the template for a new assignment.&lt;/p&gt;

&lt;h2&gt;
  
  
  How it works
&lt;/h2&gt;

&lt;p&gt;The pipeline is five steps. Each one can fail without taking the others down.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1. Design.&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
With no model key, an atelier reads the brief. It picks a domain (student, research, studio, household, product, writing, or personal), a mood, and the databases named in the sentence. If the sentence names nothing, the domain supplies a small default set. Relations are added only when both sides exist. A board is grouped only by a status or a select. A calendar is bound only to a date.&lt;/p&gt;

&lt;p&gt;If a Gemma key is set, Gemma drafts the same kind of plan. The draft is repaired before it can reach Notion: unknown property types are dropped, a board without a group is dropped, a relation to a missing database is dropped. If the repair leaves nothing usable, the atelier plan is kept and the preview says so.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. Consult the docs.&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Before the preview is shown, Hearth fetches the official pages it is about to rely on: creating a page, creating a database, data source properties, working with views, and personal access tokens. The index those pages come from is Notion’s public &lt;code&gt;llms.txt&lt;/code&gt;. If a fetch fails, the link and the reason are still shown. The build does not invent a capability because a page was offline.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3. Validate.&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Every property and every view is checked against a catalogue. The catalogue is the contract. “Notion supports charts” and “this build will create a chart” are different sentences. Charts, maps, buttons, and formulas are left as manual steps, because a bad formula can fail an entire database, and a chart depends on the workspace plan.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;4. Preview.&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
The person walks the rooms. Switching a database from Board to Calendar uses the starter rows, so October shows the worksheet on the day it is due. Nothing has been written to Notion yet.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;5. Build.&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
The builder speaks Notion API version &lt;code&gt;2026-03-11&lt;/code&gt;. The order matters.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Create the home page, then the other pages.&lt;/li&gt;
&lt;li&gt;Create each database with its first data source and its default table.&lt;/li&gt;
&lt;li&gt;Add relations only after both data source ids exist.&lt;/li&gt;
&lt;li&gt;Rename the default table, then add the board, calendar, list, gallery, timeline, and filtered tables.&lt;/li&gt;
&lt;li&gt;Place linked views of those databases on This week.&lt;/li&gt;
&lt;li&gt;Add starter rows in dependency order, so a course exists before an assignment points at it.&lt;/li&gt;
&lt;li&gt;Append the companion to How this space works.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A step that Notion refuses is recorded, skipped, and rewritten as a manual step. The rest of the workspace still gets created.&lt;/p&gt;

&lt;h2&gt;
  
  
  What I used, and what I refused to pretend
&lt;/h2&gt;

&lt;p&gt;Notion publishes enough to build this without private source code.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Source&lt;/th&gt;
&lt;th&gt;What I took from it&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Help Center&lt;/td&gt;
&lt;td&gt;What pages, databases, views, templates, and automations mean to a person.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Developer docs&lt;/td&gt;
&lt;td&gt;The request shapes: pages, data sources, properties, views, filters, parents.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;llms.txt&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;The map of those docs, so the app can fetch the page it needs instead of guessing.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;The API&lt;/td&gt;
&lt;td&gt;The actual create calls. Available on every plan, including Free, with a personal access token.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Notion MCP&lt;/td&gt;
&lt;td&gt;Proof that an assistant can create pages, databases, and views. Hearth does not require MCP. The REST API is enough for a free workspace, and some MCP tools are limited to paid plans with Notion AI.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;I kept a hard line between three facts.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Notion offers it.&lt;/strong&gt; Boards, calendars, galleries, relations, templates, automations, charts.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Hearth creates it.&lt;/strong&gt; Pages, icons, text and status and date and number and checkbox properties, relations, the views above, linked views, and starter rows.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The person still does it.&lt;/strong&gt; The cover image, a database template, a date reminder, one automation, and sharing. Buttons are ignored if you send them in a schema write. Charts can be created by the API, but the configuration depends on the plan, so this version does not guess it.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That line is the part I would want a judge to notice. A builder that claims every Notion feature is a builder that fails on the third call.&lt;/p&gt;

&lt;h2&gt;
  
  
  Decisions I would defend
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Preview before write.&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
The costly mistake is a wrong database in someone’s real sidebar. Rehearsal and the preview exist so the person can say no.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;A catalogue, not a one-time reading of the docs.&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Reading the documentation once would go stale. The catalogue is checked on every plan. The live docs are consulted for the pages the plan actually uses. When Notion changes a request, one of those two will show it.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Repair the model, do not trust it.&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Gemma is optional. The atelier already produces a plan the builder can execute. The model is allowed to change names, rooms, and copy. It is not allowed to invent a property type the API will reject. If it does, that part is removed and named.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;A personal access token, not a stored login.&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
On the Free plan, the workspace owner can create a token and the API will create a private page as them. An internal integration is the other door: it only sees pages shared with it, so the person picks the parent. The token stays in the browser tab for the build. The server does not write it down.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Small on purpose.&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
A handful of pages, the databases the sentence asked for, three starter rows each. Free workspaces have a block limit. A first version that creates fifty databases is not a kindness.&lt;/p&gt;

&lt;h2&gt;
  
  
  What went wrong, and what I changed
&lt;/h2&gt;

&lt;p&gt;The first token build failed in a way the happy path did not show.&lt;/p&gt;

&lt;p&gt;Notion returns a personal access token as a bot user. I treated every bot as an internal integration and tried to build inside the page the person had edited most recently. That is the wrong parent. A token that belongs to a person is allowed to create a private page at the top of the sidebar. An internal integration is not. The check now tells those two apart.&lt;/p&gt;

&lt;p&gt;The page body also used an icon the current API rejects, so the first create died before any database existed. Page writes now use the documented emoji form, and if the block body is refused, the same page is sent again as markdown. When Notion refuses a call, the status and the message are printed in the server log. Before that, the failure lived only inside the response, which made it look like nothing had happened.&lt;/p&gt;

&lt;h2&gt;
  
  
  What I am not claiming
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Hearth does not read Notion’s private source.&lt;/li&gt;
&lt;li&gt;It does not turn on automations, upload a cover, or invite a teammate.&lt;/li&gt;
&lt;li&gt;Gemma is not required. With no key, the atelier designs the workspace.&lt;/li&gt;
&lt;li&gt;A free API does not mean a free model or free hosting. Those are separate costs.&lt;/li&gt;
&lt;li&gt;Some MCP tools, and charts, depend on the workspace plan. The first version stays on the calls a free workspace can make.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  What I would do next
&lt;/h2&gt;

&lt;p&gt;Keep the catalogue honest as Notion’s API moves. The next useful step is applying a database template once the person has created one, because the API can apply a template and still cannot design it. After that, a public connection so a teammate can authorize Hearth without pasting a token.&lt;/p&gt;

&lt;p&gt;The product, as it stands, is the sentence I started with.&lt;/p&gt;

&lt;p&gt;Describe the workspace. Look at the rooms. Create the ones Notion will accept. Leave the rest as instructions a person can follow without guessing.&lt;/p&gt;

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

&lt;p&gt;&lt;a href="https://github.com/maitri-vv/" rel="noopener noreferrer"&gt;https://github.com/maitri-vv/&lt;/a&gt;&lt;/p&gt;

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

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

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

&lt;h2&gt;
  
  
  My Agent Session
&lt;/h2&gt;

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

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

</description>
      <category>devchallenge</category>
      <category>hf26challenge</category>
    </item>
    <item>
      <title>Plain Sight Walk is a walking game that lives in your pocket.</title>
      <dc:creator>maitri-vv</dc:creator>
      <pubDate>Fri, 09 Oct 2026 15:18:26 +0000</pubDate>
      <link>https://dev.to/maitrivv/plain-sight-walk-is-a-walking-game-that-lives-in-your-pocket-gjo</link>
      <guid>https://dev.to/maitrivv/plain-sight-walk-is-a-walking-game-that-lives-in-your-pocket-gjo</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;Plain Sight Walk is a walking game that lives in your pocket.&lt;/p&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%2Faj58p5tskg98baczo7wy.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%2Faj58p5tskg98baczo7wy.png" alt="plain-sight-walk powered by Gemma" width="800" height="400"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Every walk has a secret word, say WANDER. You spell it one letter at a time with things you actually find outside: W is for wall, A is for acorn, N is for nest. Gemma writes you a riddle for each letter and can read it aloud, so the phone stays away. When you find the thing, you photograph it, and an open vision model checks the photo. When the word is complete, the app turns your walk into a photo carousel: each slide is one of your photos, stamped with its letter, the object, and how many kilometres into the walk you took it. The secret word picks the look of the whole set. WANDER becomes "Roadside Almanac", a warm sepia. SHADOW becomes "Chiaroscuro", black and white.&lt;/p&gt;

&lt;p&gt;The screen is only for the start and the end. The middle of the experience is looking at things.&lt;/p&gt;

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

&lt;p&gt;Live app: &lt;a href=""&gt;plain-sight-walk.vercel.app&lt;/a&gt; (best in recent Chrome or Edge; it needs WebGPU for Gemma)&lt;/p&gt;

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

&lt;p&gt;Code (MIT):&lt;/p&gt;


&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://assets.dev.to/assets/github-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/maitri-vv" rel="noopener noreferrer"&gt;
        maitri-vv
      &lt;/a&gt; / &lt;a href="https://github.com/maitri-vv/plain-sight-walk" rel="noopener noreferrer"&gt;
        plain-sight-walk
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      
    &lt;/h3&gt;
  &lt;/div&gt;
  &lt;div class="ltag-github-body"&gt;
    
&lt;div id="readme" class="md"&gt;&lt;div class="markdown-heading"&gt;
&lt;h1 class="heading-element"&gt;Plain Sight Walk&lt;/h1&gt;
&lt;/div&gt;
&lt;p&gt;Every walk has a secret word. You spell it one letter at a time with real things you find outside (a leaf, a rock, the sky). Built for the DEV "Touch Grass" challenge.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Everything runs in your browser, with no server and no API key.&lt;/strong&gt;&lt;/p&gt;
&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Job&lt;/th&gt;
&lt;th&gt;Open model&lt;/th&gt;
&lt;th&gt;How it runs&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Writes the riddles, field notes and closing postcard&lt;/td&gt;
&lt;td&gt;Gemma (2B, the Gemma build available in WebLLM)&lt;/td&gt;
&lt;td&gt;
&lt;a href="https://github.com/mlc-ai/web-llm" rel="noopener noreferrer"&gt;WebLLM&lt;/a&gt;, WebGPU&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Checks your photo matches the clue&lt;/td&gt;
&lt;td&gt;CLIP ViT-B/32 (ONNX port by Xenova)&lt;/td&gt;
&lt;td&gt;&lt;a href="https://github.com/huggingface/transformers.js" rel="noopener noreferrer"&gt;transformers.js&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;
&lt;p&gt;Photos are never uploaded. After the first load, models are cached and the app works with no signal.&lt;/p&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Run it&lt;/h2&gt;
&lt;/div&gt;
&lt;div class="highlight highlight-source-shell notranslate position-relative overflow-auto js-code-highlight"&gt;
&lt;pre&gt;python3 -m http.server 8000   &lt;span class="pl-c"&gt;&lt;span class="pl-c"&gt;#&lt;/span&gt; WebGPU needs https or localhost&lt;/span&gt;
&lt;span class="pl-c"&gt;&lt;span class="pl-c"&gt;#&lt;/span&gt; open http://localhost:8000 in recent Chrome or Edge, tap "Prepare for the walk"&lt;/span&gt;&lt;/pre&gt;

&lt;/div&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Deploy (Vercel)&lt;/h2&gt;
&lt;/div&gt;
&lt;p&gt;Push this folder to GitHub, then import the repo in Vercel. Framework preset "Other", no build command, no output…&lt;/p&gt;&lt;/div&gt;
  &lt;/div&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/maitri-vv/plain-sight-walk" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;


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

&lt;p&gt;You cannot play this at a desk. The only way to earn a letter is to stand in front of a real wall, a real patch of moss, a real nest. The riddles are read aloud, so between finds the phone can stay in your pocket. A six-letter word takes about [X] minutes of walking when you actually look. The carousel at the end gives you a reason to look properly: you are composing a photograph, not ticking a box.You cannot play this at a desk. The only way to earn a letter is to stand in front of a real wall, a real patch of moss, a real nest. The riddles are read aloud, so between finds the phone can stay in your pocket. A six-letter word takes about [X] minutes of walking when you actually look. The carousel at the end gives you a reason to look properly: you are composing a photograph, not ticking a box.&lt;/p&gt;

&lt;p&gt;It is a static site: no backend, no API key, no database. It is deployed on Vercel straight from GitHub.&lt;/p&gt;

&lt;p&gt;Gemma, running in the browser through WebLLM on WebGPU. It writes the riddles, a one-line "look closer" note after each find, and the closing postcard. The app picks the Gemma build WebLLM offers; in my run that was [model id shown in the app].&lt;br&gt;
CLIP, running through transformers.js. This does zero-shot image classification. Your photo is scored against the twenty possible objects plus distractors like "a person" and "a computer screen". A match means the target is the top label above a confidence threshold.&lt;br&gt;
The device's own GPS. The app adds up distance as you walk and keeps only the running total. Coordinates are never stored or sent anywhere.&lt;br&gt;
A service worker caches the app shell. WebLLM and transformers.js cache the model files themselves, so after the first load the app can run with no signal.&lt;br&gt;
A canvas renderer composes the carousel as 1080x1350 slides, ready to save or share.&lt;/p&gt;

&lt;p&gt;Three design decisions mattered more than any code:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;The object for each letter comes from a fixed table; Gemma writes the language around it. My first instinct was to let the model choose a thing for each letter. But a small model sometimes picks something you cannot photograph, and CLIP is far more reliable on common objects. Splitting the work this way made the game dependable outdoors, where there is no retry button for a bad clue.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Gemma is told to give attention, not facts. Small models invent facts about nature, confidently. So the field notes only invite you to look closer. [If you tested the unconstrained version, say what it did.]&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The game never calls you wrong without an exit. CLIP will sometimes be mistaken, so there is always a "Count it anyway" button. A walk is not an exam.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

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

&lt;p&gt;It works where signal does not. A walk is exactly where signal disappears. Both models run in the browser and are cached, so [describe what you saw when you went offline].&lt;br&gt;
Your photos stay on your phone. A game that asks you to photograph your neighbourhood should not upload it. With open weights running locally, there is nothing to upload them to.&lt;br&gt;
It costs nothing to run. There is no per-request bill, so I can leave the demo public without worrying that a stranger's walk costs me money.&lt;br&gt;
I can swap the model. The app selects Gemma from WebLLM's list and CLIP is one line. When a better small model appears, the game improves with a small edit.&lt;br&gt;
Where a closed approach would have been worse: [your honest comparison, or delete this line].&lt;br&gt;
What Went Wrong&lt;br&gt;
The first download failed on my network. My first attempt stopped at Cache.add() encountered a network error. The DevTools Network tab showed the tokenizer.json request returning a redirect, and the file it redirected to failing. CLIP, which comes from the same site, loaded fine, so Hugging Face itself was reachable; something between me and its file host was not. [How you resolved it: a hotspot, secure DNS, another network, or not at all.] The lesson: an offline-first app needs a graceful path when the first download fails. The app now retries once and then falls back to built-in riddles instead of stopping.&lt;br&gt;
My own service worker served me a stale page. I cached the app shell "cache first", so my fixes did not show up and I debugged old code for a while. App files are now fetched network-first.&lt;br&gt;
The first load is large, roughly 2 GB [check your own number under DevTools, Application, Cache Storage], so it should be prepared on Wi-Fi before you leave home.&lt;br&gt;
GPS can pause when a phone screen locks. I added a "keep screen awake" option, at a battery cost. [Your own result.]&lt;br&gt;
CLIP is sometimes wrong, and GPS is only accurate to roughly a few metres under open sky, less under trees. Treat the kilometres as "about".&lt;/p&gt;

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

&lt;p&gt;Best Use of Gemma: Gemma is the voice of the whole game, and it runs entirely on the player's device.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;&lt;em&gt;Built for Touch Grass. Go outside; it is better than the screen.&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

</description>
      <category>devchallenge</category>
      <category>hf26challenge</category>
      <category>hacktoberfest</category>
    </item>
    <item>
      <title>FollowUp: I Built My Dad a Private AI That Remembers Where His Messages Came From</title>
      <dc:creator>maitri-vv</dc:creator>
      <pubDate>Sat, 03 Oct 2026 12:27:22 +0000</pubDate>
      <link>https://dev.to/maitrivv/followup-i-built-my-dad-a-private-ai-that-remembers-where-his-messages-came-from-471f</link>
      <guid>https://dev.to/maitrivv/followup-i-built-my-dad-a-private-ai-that-remembers-where-his-messages-came-from-471f</guid>
      <description>&lt;p&gt;&lt;em&gt;This is a submission for the &lt;a href="https://dev.to/challenges/hacktoberfest-weekend-2026-10-01"&gt;Hacktoberfest Weekend Challenge: Build for a Friend&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  What I Built
&lt;/h2&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%2Fq2r5nj0r8d7w1x3aak0a.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%2Fq2r5nj0r8d7w1x3aak0a.png" alt="FollowUp: I Built My Dad a Private AI That Remembers Where His Messages Came From" width="800" height="471"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;My dad remembers the thing.&lt;/p&gt;

&lt;p&gt;He just doesn't always remember &lt;strong&gt;where it came from&lt;/strong&gt; 🥲 or what he still needed to do about it.&lt;/p&gt;

&lt;p&gt;A society payment. An AC offer. A quotation someone sent as a PDF. A document buried somewhere in a family WhatsApp chat.&lt;/p&gt;

&lt;p&gt;The information exists.&lt;/p&gt;

&lt;p&gt;Finding it again is the problem.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;em&gt;So I built FollowUp for him.&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;FollowUp turns buried conversations into things you actually need to act on.&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;FollowUp is a private-first AI memory assistant that turns scattered messages, notes, documents, and screenshots into something you can actually ask questions about.&lt;/p&gt;

&lt;p&gt;You can ask things like:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;"When is the society payment due?"&lt;/li&gt;
&lt;li&gt;"Who sent me that AC offer?"&lt;/li&gt;
&lt;li&gt;"Where did I get that quotation?"&lt;/li&gt;
&lt;li&gt;"What payments do I need to make?"&lt;/li&gt;
&lt;li&gt;"What am I forgetting?"&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;But FollowUp isn't designed to just give you an answer.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;It shows you the source behind the answer.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;If FollowUp tells you that the society maintenance is ₹4,800 and due on 7 October, you can open the result and see the original message, sender, group, and date that the answer came from.&lt;/p&gt;

&lt;p&gt;That makes the result traceable instead of just another AI response.&lt;/p&gt;

&lt;h3&gt;
  
  
  The feature I built specifically for my dad
&lt;/h3&gt;

&lt;p&gt;The most interesting part ended up being &lt;strong&gt;"What am I forgetting?"&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Instead of requiring my dad to remember the right question, FollowUp looks through imported memories for things that appear actionable:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;payments&lt;/li&gt;
&lt;li&gt;renewals&lt;/li&gt;
&lt;li&gt;requests&lt;/li&gt;
&lt;li&gt;offers&lt;/li&gt;
&lt;li&gt;deadlines&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;It turns those buried messages into actionable cards.&lt;/p&gt;

&lt;p&gt;For example:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;SOCIETY MAINTENANCE&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
₹4,800&lt;br&gt;&lt;br&gt;
&lt;strong&gt;PAY BY 7 October 2026&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Click it, and FollowUp opens the original message that caused it to appear.&lt;/p&gt;

&lt;p&gt;So the loop becomes:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;find the thing → understand why it matters → verify where it came from&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;For the public demo, I use synthetic memories rather than uploading my dad's private conversations.&lt;/p&gt;


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

&lt;p&gt;&lt;strong&gt;Live Demo:&lt;/strong&gt; &lt;a href="https://hacktoberfest-followup-peach.vercel.app/" rel="noopener noreferrer"&gt;https://hacktoberfest-followup-peach.vercel.app/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The demo is built around the actual problem rather than a generic chatbot flow.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Open the demo.&lt;/li&gt;
&lt;li&gt;Click &lt;strong&gt;Load demo Dad data&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Open &lt;strong&gt;"What am I forgetting?"&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;See payments, requests, and offers surfaced from the imported memories.&lt;/li&gt;
&lt;li&gt;Click an actionable item.&lt;/li&gt;
&lt;li&gt;Inspect the exact original source.&lt;/li&gt;
&lt;li&gt;Ask a natural-language question such as:

&lt;ul&gt;
&lt;li&gt;"Who sent me the AC offer?"&lt;/li&gt;
&lt;li&gt;"When is the society payment due?"&lt;/li&gt;
&lt;li&gt;"Where did I get the quotation?"&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Get a grounded answer with the supporting memories.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The public deployment currently starts with an empty browser memory store by design. The demo data is loaded explicitly so nobody's private history is part of the public deployment.&lt;/p&gt;


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

&lt;p&gt;&lt;strong&gt;GitHub:&lt;/strong&gt; &lt;a href="https://github.com/maitri-vv/FollowUp" rel="noopener noreferrer"&gt;https://github.com/maitri-vv/FollowUp&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The project is built with:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Next.js&lt;/li&gt;
&lt;li&gt;React&lt;/li&gt;
&lt;li&gt;Transformers.js&lt;/li&gt;
&lt;li&gt;Gemma 3 270M IT&lt;/li&gt;
&lt;li&gt;browser-side WASM inference&lt;/li&gt;
&lt;li&gt;IndexedDB&lt;/li&gt;
&lt;li&gt;semantic + lexical retrieval&lt;/li&gt;
&lt;li&gt;optional Backboard RAG&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The repository contains the ingestion/parsing logic, retrieval pipeline, local Gemma inference, actionable-memory detection, source tracing, and optional Assisted Mode.&lt;/p&gt;


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

&lt;p&gt;The main constraint was simple:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;AI shouldn't be a chatbot bolted onto the product. It should be part of how FollowUp works.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The core architecture looks like this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;WhatsApp exports / notes / documents
              ↓
        Local ingestion
              ↓
           Chunking
              ↓
     Embeddings + retrieval
              ↓
     Local open-weight Gemma
              ↓
    Grounded answer + sources
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;h3&gt;
  
  
  1. Importing memories
&lt;/h3&gt;

&lt;p&gt;FollowUp turns imported information into structured memories containing things such as:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;source&lt;/li&gt;
&lt;li&gt;sender&lt;/li&gt;
&lt;li&gt;group&lt;/li&gt;
&lt;li&gt;date&lt;/li&gt;
&lt;li&gt;category&lt;/li&gt;
&lt;li&gt;original message&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;WhatsApp exports can be parsed into individual messages so they can be retrieved independently.&lt;/p&gt;

&lt;p&gt;The public demo also includes synthetic Dad memories so the entire flow can be tested without using real personal data.&lt;/p&gt;
&lt;h3&gt;
  
  
  2. Retrieval
&lt;/h3&gt;

&lt;p&gt;FollowUp uses both semantic retrieval and lexical matching.&lt;/p&gt;

&lt;p&gt;Semantic retrieval helps when the question and the original message use different words.&lt;/p&gt;

&lt;p&gt;Lexical matching helps preserve exact information such as:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;names&lt;/li&gt;
&lt;li&gt;dates&lt;/li&gt;
&lt;li&gt;amounts&lt;/li&gt;
&lt;li&gt;"pay"&lt;/li&gt;
&lt;li&gt;"renewal"&lt;/li&gt;
&lt;li&gt;"quotation"&lt;/li&gt;
&lt;li&gt;"before Friday"&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The results are combined before the answer layer sees them.&lt;/p&gt;

&lt;p&gt;This matters because personal-memory search isn't just a keyword problem.&lt;/p&gt;

&lt;p&gt;If my dad asks:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"Who sent me that AC thing?"&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;the useful memory might actually say:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"Voltas AC service package at the festival offer price."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Semantic matching helps connect those ideas, while lexical matching protects the exact details.&lt;/p&gt;
&lt;h3&gt;
  
  
  3. Gemma runs locally
&lt;/h3&gt;

&lt;p&gt;The open-weight model at the core of FollowUp is &lt;strong&gt;Gemma 3 270M IT&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;I run it through &lt;strong&gt;Transformers.js&lt;/strong&gt; using browser-side WASM inference.&lt;/p&gt;

&lt;p&gt;That gives FollowUp a local inference path without requiring a hosted LLM for Private Mode.&lt;/p&gt;

&lt;p&gt;The model receives retrieved context and generates an answer from that evidence.&lt;/p&gt;

&lt;p&gt;I also added a deterministic grounded-answer layer for common memory tasks such as payments, senders, locations, and actionable items.&lt;/p&gt;

&lt;p&gt;That makes common queries faster while still keeping Gemma available as the general language layer.&lt;/p&gt;
&lt;h3&gt;
  
  
  4. Grounded answers
&lt;/h3&gt;

&lt;p&gt;FollowUp is deliberately conservative.&lt;/p&gt;

&lt;p&gt;The retrieval layer provides the evidence.&lt;/p&gt;

&lt;p&gt;The answer layer is instructed to answer from that evidence rather than inventing missing details.&lt;/p&gt;

&lt;p&gt;If the available memories don't contain enough information, FollowUp should say so.&lt;/p&gt;

&lt;p&gt;And when an answer is produced, the user can inspect the underlying memory.&lt;/p&gt;

&lt;p&gt;For a personal-memory product, I cared more about:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;"Show me why you think that."&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;than making the assistant sound confident.&lt;/p&gt;
&lt;h3&gt;
  
  
  5. "What am I forgetting?"
&lt;/h3&gt;

&lt;p&gt;This is where retrieval becomes more than a search box.&lt;/p&gt;

&lt;p&gt;FollowUp identifies imported memories containing actionable signals such as:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;payment amounts&lt;/li&gt;
&lt;li&gt;due dates&lt;/li&gt;
&lt;li&gt;renewal dates&lt;/li&gt;
&lt;li&gt;requests&lt;/li&gt;
&lt;li&gt;offers&lt;/li&gt;
&lt;li&gt;deadlines&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;It extracts the relevant action and date and presents those memories as cards.&lt;/p&gt;

&lt;p&gt;For example:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;PAYMENT

Society maintenance

₹4,800

PAY BY 7 October 2026

Society Admin · Green View Society
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;The card is clickable, so the user can immediately inspect the evidence behind it.&lt;/p&gt;
&lt;h3&gt;
  
  
  6. Optional Assisted Mode
&lt;/h3&gt;

&lt;p&gt;FollowUp also has an optional &lt;strong&gt;Assisted Mode&lt;/strong&gt; using Backboard.&lt;/p&gt;

&lt;p&gt;In this mode, retrieved memories can be sent to Backboard for hosted RAG assistance.&lt;/p&gt;

&lt;p&gt;I deliberately kept this separate from Private Mode.&lt;/p&gt;

&lt;p&gt;Private Mode is designed around keeping imported memories in the browser and running the open-weight model locally.&lt;/p&gt;

&lt;p&gt;Assisted Mode is an explicit choice to use hosted assistance.&lt;/p&gt;

&lt;p&gt;I also added deduplication to the Backboard memory sync so repeatedly syncing the same imported memories doesn't blindly create duplicates.&lt;/p&gt;


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

&lt;p&gt;I tested FollowUp with a synthetic WhatsApp conversation containing realistic examples of the problem:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;a ₹4,800 society maintenance payment&lt;/li&gt;
&lt;li&gt;an AC service offer from Rajesh&lt;/li&gt;
&lt;li&gt;a quotation sent as a PDF&lt;/li&gt;
&lt;li&gt;an electricity bill request&lt;/li&gt;
&lt;li&gt;a bank statement sent in a family chat&lt;/li&gt;
&lt;li&gt;an LIC renewal reminder&lt;/li&gt;
&lt;li&gt;repeated references to the same offer and quotation&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The import worked, and the main natural-language queries returned the expected information.&lt;/p&gt;

&lt;p&gt;The important test wasn't simply whether an AI model could answer a question.&lt;/p&gt;

&lt;p&gt;It was whether FollowUp could answer the question &lt;strong&gt;and let me trace the answer back to the original memory.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;That source trail is the part I wanted to build for my dad.&lt;/p&gt;


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

&lt;p&gt;FollowUp deals with exactly the kind of information people may not want to send to a third-party AI service:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;family conversations, reminders, documents, payments, and personal history.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;That made the choice of open-weight AI more than a technology preference.&lt;/p&gt;

&lt;p&gt;FollowUp's Private Mode can run its language model locally in the browser through Transformers.js.&lt;/p&gt;

&lt;p&gt;The basic path is:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Personal memories
       ↓
    Browser
       ↓
Local retrieval
       ↓
Local Gemma inference
       ↓
     Answer
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;A hosted LLM isn't required for that core path.&lt;/p&gt;

&lt;p&gt;That gives the product a different privacy boundary from a design where every personal memory has to be sent to a remote model before it can be useful.&lt;/p&gt;

&lt;p&gt;It also gives me control over the model layer.&lt;/p&gt;

&lt;p&gt;I can experiment with different open models, change the inference setup, change the retrieval strategy, and keep the application architecture under my control.&lt;/p&gt;

&lt;p&gt;There is a tradeoff.&lt;/p&gt;

&lt;p&gt;Running a model locally in the browser is slower than calling a large hosted model.&lt;/p&gt;

&lt;p&gt;But for FollowUp, that tradeoff is meaningful.&lt;/p&gt;

&lt;p&gt;If I'm building something whose job is to help remember personal conversations, I don't want uploading an entire history to a closed API to be the default requirement.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Open innovation made the privacy-first version of FollowUp possible.&lt;/strong&gt;&lt;/p&gt;


&lt;h2&gt;
  
  
  My Agent Session
&lt;/h2&gt;

&lt;p&gt;I used DevRelay during the submission workflow to inspect the project, verify the live Hacktoberfest Weekend Challenge requirements, and prepare this submission.&lt;/p&gt;

&lt;p&gt;The curated agent session is publicly available here:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://dev.to/agent_sessions/preparing-followup-for-the-hacktoberfest-weekend-challenge-with-devrelay-mhdiqn"&gt;https://dev.to/agent_sessions/preparing-followup-for-the-hacktoberfest-weekend-challenge-with-devrelay-mhdiqn&lt;/a&gt;&lt;/p&gt;


&lt;div class="ltag-agent-session"&gt;
  &lt;div class="agent-session-header"&gt;
    
    &lt;span class="agent-session-tool-icon-badge" title="GitHub Copilot"&gt;
&lt;/span&gt;
    &lt;span class="agent-session-title"&gt;Preparing FollowUp for the Hacktoberfest Weekend Challenge with DevRelay&lt;/span&gt;
  &lt;/div&gt;

  &lt;div class="agent-session-scroll"&gt;

      &lt;div class="agent-session-message agent-session-user"&gt;
        &lt;div class="agent-session-role-badge agent-session-role-user"&gt;
          You
        &lt;/div&gt;
        &lt;div class="agent-session-content"&gt;
                &lt;div&gt;
                  &lt;div class="agent-session-text agent-session-text-collapse"&gt;
                    &lt;p&gt;Use DevRelay to inspect the current FollowUp project and tell me what DevRelay capabilities are relevant to my Hacktoberfest Weekend Challenge submission.&lt;/p&gt;

&lt;p&gt;FollowUp is already built and deployed.&lt;/p&gt;

&lt;p&gt;Public repository: &lt;a href="https://github.com/maitri-vv/FollowUp" rel="noopener noreferrer"&gt;https://github.com/maitri-vv/FollowUp&lt;/a&gt;&lt;br&gt;
Live demo: &lt;a href="https://hacktoberfest-followup-peach.vercel.app/" rel="noopener noreferrer"&gt;https://hacktoberfest-followup-peach.vercel.app/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I specifically want to qualify for the DevRelay prize.&lt;/p&gt;

&lt;p&gt;Do not modify any code yet.&lt;/p&gt;

&lt;p&gt;First:&lt;br&gt;
1. Inspect the current FollowUp project.&lt;br&gt;
2. Use DevRelay to inspect the Hacktoberfest Weekend Challenge and DevRelay information.&lt;br&gt;
3. Identify how DevRelay can make a genuine contribution to this project or its submission workflow.&lt;br&gt;
4. Pay particular attention to Agent Sessions because I need to include the resulting session in my DEV submission.&lt;br&gt;
5. Tell me exactly what you recommend doing next.&lt;/p&gt;

&lt;p&gt;Do not rewrite or refactor FollowUp.&lt;/p&gt;

                  &lt;/div&gt;
                  Show more
                &lt;/div&gt;
        &lt;/div&gt;
      &lt;/div&gt;

      &lt;div class="agent-session-message agent-session-assistant"&gt;
        &lt;div class="agent-session-role-badge agent-session-role-assistant"&gt;
          Agent
        &lt;/div&gt;
        &lt;div class="agent-session-content"&gt;
                &lt;div class="agent-session-text"&gt;
                  &lt;p&gt;I'll inspect FollowUp locally and pull live Hacktoberfest/DevRelay rules so the prize-track advice matches the current challenge, not last year's PR-based Hacktoberfest.&lt;/p&gt;

                &lt;/div&gt;
              &lt;div class="agent-session-tool-call"&gt;
                
                  &lt;span class="agent-session-chevron"&gt;▸&lt;/span&gt;
                  &lt;span class="tool-name tool-name-getknowledgedocument"&gt;get_knowledge_document&lt;/span&gt;
                    &lt;span class="tool-input-preview"&gt;topic: hacktoberfest&lt;/span&gt;
                
                &lt;div class="agent-session-tool-detail"&gt;
                    &lt;div class="tool-section"&gt;
                      &lt;div class="tool-section-label"&gt;Input&lt;/div&gt;
                      &lt;pre class="agent-session-pre"&gt;&lt;code&gt;topic: hacktoberfest&lt;/code&gt;&lt;/pre&gt;
                    &lt;/div&gt;
                    &lt;div class="tool-section"&gt;
                      &lt;div class="tool-section-label"&gt;Output&lt;/div&gt;
                      &lt;pre class="agent-session-pre"&gt;&lt;code&gt;Hacktoberfest 2026 is run by MLH and DEV. Pull requests no longer count. DEV Challenges are the submission path. Install-and-log-in to DevRelay is a Tools sticker. Challenge prompts and prizes are live data, not in this static guide.&lt;/code&gt;&lt;/pre&gt;
                    &lt;/div&gt;
                &lt;/div&gt;
              &lt;/div&gt;
              &lt;div class="agent-session-tool-call"&gt;
                
                  &lt;span class="agent-session-chevron"&gt;▸&lt;/span&gt;
                  &lt;span class="tool-name tool-name-getknowledgedocument"&gt;get_knowledge_document&lt;/span&gt;
                    &lt;span class="tool-input-preview"&gt;topic: dev-challenges&lt;/span&gt;
                
                &lt;div class="agent-session-tool-detail"&gt;
                    &lt;div class="tool-section"&gt;
                      &lt;div class="tool-section-label"&gt;Input&lt;/div&gt;
                      &lt;pre class="agent-session-pre"&gt;&lt;code&gt;topic: dev-challenges&lt;/code&gt;&lt;/pre&gt;
                    &lt;/div&gt;
                    &lt;div class="tool-section"&gt;
                      &lt;div class="tool-section-label"&gt;Output&lt;/div&gt;
                      &lt;pre class="agent-session-pre"&gt;&lt;code&gt;You enter by publishing a DEV post with the required tag and template. AI is allowed with disclosure. Optional: embed an agent session. Weekend Challenges usually allow one submission per person. New work during the entry window.&lt;/code&gt;&lt;/pre&gt;
                    &lt;/div&gt;
                &lt;/div&gt;
              &lt;/div&gt;
              &lt;div class="agent-session-tool-call"&gt;
                
                  &lt;span class="agent-session-chevron"&gt;▸&lt;/span&gt;
                  &lt;span class="tool-name tool-name-getchallenges"&gt;get_challenges&lt;/span&gt;
                    &lt;span class="tool-input-preview"&gt;page: 1, per_page: 20&lt;/span&gt;
                
                &lt;div class="agent-session-tool-detail"&gt;
                    &lt;div class="tool-section"&gt;
                      &lt;div class="tool-section-label"&gt;Input&lt;/div&gt;
                      &lt;pre class="agent-session-pre"&gt;&lt;code&gt;page: 1, per_page: 20&lt;/code&gt;&lt;/pre&gt;
                    &lt;/div&gt;
                    &lt;div class="tool-section"&gt;
                      &lt;div class="tool-section-label"&gt;Output&lt;/div&gt;
                      &lt;pre class="agent-session-pre"&gt;&lt;code&gt;Active: Hacktoberfest Weekend Challenge: Build for a Friend (id 78, slug hacktoberfest-weekend-2026-10-01). Starts 2026-10-02T02:00:00Z, ends 2026-10-05T06:59:00Z. Prompt: open-source AI at the core, built for a friend or loved one. Writing quality weighted most heavily. DevRelay agent session encouraged, not a cash category.&lt;/code&gt;&lt;/pre&gt;
                    &lt;/div&gt;
                &lt;/div&gt;
              &lt;/div&gt;
              &lt;div class="agent-session-tool-call"&gt;
                
                  &lt;span class="agent-session-chevron"&gt;▸&lt;/span&gt;
                  &lt;span class="tool-name tool-name-mlhconnectionstatus"&gt;mlh_connection_status&lt;/span&gt;
                    &lt;span class="tool-input-preview"&gt;{}&lt;/span&gt;
                
                &lt;div class="agent-session-tool-detail"&gt;
                    &lt;div class="tool-section"&gt;
                      &lt;div class="tool-section-label"&gt;Input&lt;/div&gt;
                      &lt;pre class="agent-session-pre highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
                    &lt;/div&gt;
                    &lt;div class="tool-section"&gt;
                      &lt;div class="tool-section-label"&gt;Output&lt;/div&gt;
                      &lt;pre class="agent-session-pre"&gt;&lt;code&gt;Connected. DEV read/write scopes present. Identity redacted.&lt;/code&gt;&lt;/pre&gt;
                    &lt;/div&gt;
                &lt;/div&gt;
              &lt;/div&gt;
              &lt;div class="agent-session-tool-call"&gt;
                
                  &lt;span class="agent-session-chevron"&gt;▸&lt;/span&gt;
                  &lt;span class="tool-name tool-name-listagentsessions"&gt;list_agent_sessions&lt;/span&gt;
                    &lt;span class="tool-input-preview"&gt;{}&lt;/span&gt;
                
                &lt;div class="agent-session-tool-detail"&gt;
                    &lt;div class="tool-section"&gt;
                      &lt;div class="tool-section-label"&gt;Input&lt;/div&gt;
                      &lt;pre class="agent-session-pre highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
                    &lt;/div&gt;
                    &lt;div class="tool-section"&gt;
                      &lt;div class="tool-section-label"&gt;Output&lt;/div&gt;
                      &lt;pre class="agent-session-pre"&gt;&lt;code&gt;No existing agent sessions on this DEV account.&lt;/code&gt;&lt;/pre&gt;
                    &lt;/div&gt;
                &lt;/div&gt;
              &lt;/div&gt;
              &lt;div class="agent-session-tool-call"&gt;
                
                  &lt;span class="agent-session-chevron"&gt;▸&lt;/span&gt;
                  &lt;span class="tool-name tool-name-getmyarticles"&gt;get_my_articles&lt;/span&gt;
                    &lt;span class="tool-input-preview"&gt;state: all&lt;/span&gt;
                
                &lt;div class="agent-session-tool-detail"&gt;
                    &lt;div class="tool-section"&gt;
                      &lt;div class="tool-section-label"&gt;Input&lt;/div&gt;
                      &lt;pre class="agent-session-pre"&gt;&lt;code&gt;state: all&lt;/code&gt;&lt;/pre&gt;
                    &lt;/div&gt;
                    &lt;div class="tool-section"&gt;
                      &lt;div class="tool-section-label"&gt;Output&lt;/div&gt;
                      &lt;pre class="agent-session-pre"&gt;&lt;code&gt;Unpublished Hacktoberfest Weekend Challenge draft exists, using the official template. Demo and repo placeholders still incomplete. My Agent Session section empty. Draft edit URL omitted here because unpublished DEV URLs are share-secret.&lt;/code&gt;&lt;/pre&gt;
                    &lt;/div&gt;
                &lt;/div&gt;
              &lt;/div&gt;
              &lt;div class="agent-session-tool-call"&gt;
                
                  &lt;span class="agent-session-chevron"&gt;▸&lt;/span&gt;
                  &lt;span class="tool-name tool-name-searchdevtosemantic"&gt;search_dev_to_semantic&lt;/span&gt;
                    &lt;span class="tool-input-preview"&gt;query: Hacktoberfest Weekend Challenge DevRelay prize agent session submission&lt;/span&gt;
                
                &lt;div class="agent-session-tool-detail"&gt;
                    &lt;div class="tool-section"&gt;
                      &lt;div class="tool-section-label"&gt;Input&lt;/div&gt;
                      &lt;pre class="agent-session-pre"&gt;&lt;code&gt;query: Hacktoberfest Weekend Challenge DevRelay prize agent session submission&lt;/code&gt;&lt;/pre&gt;
                    &lt;/div&gt;
                    &lt;div class="tool-section"&gt;
                      &lt;div class="tool-section-label"&gt;Output&lt;/div&gt;
                      &lt;pre class="agent-session-pre"&gt;&lt;code&gt;Official launch post: Join the Hacktoberfest Weekend Challenge: Build for a Friend. Show-your-work: save an agent session with DevRelay and embed it. Cash prizes are overall, Gemma, Backboard, Entire, and other listed partners — not a DevRelay cash prize.&lt;/code&gt;&lt;/pre&gt;
                    &lt;/div&gt;
                &lt;/div&gt;
              &lt;/div&gt;
                &lt;div&gt;
                  &lt;div class="agent-session-text agent-session-text-collapse"&gt;
                    &lt;p&gt;FollowUp in this workspace is branded Recall: a private-first memory assistant for Dad. Local IndexedDB storage, MiniLM embeddings plus lexical retrieval, and Gemma 3 270M in the browser via Transformers.js. Optional Assisted Mode sends retrieved snippets to Backboard. Synthetic demo data is the public judging path.&lt;/p&gt;

&lt;p&gt;The live Weekend Challenge matches the product: open-weight local inference for one real person. DevRelay's genuine contribution is the submission workflow, not a new app feature: inspect live rules, confirm there is no DevRelay cash prize, then save and embed an Agent Session so judges can see the process. Closest honest cash categories are Best Use of Gemma and, if Assisted Mode is real, Best Use of Backboard. Entire is a different product.&lt;/p&gt;

&lt;p&gt;Recommended next: save a curated Agent Session, Make Public on DEV, patch the existing draft (live demo URL, FollowUp repo, session embed). Do not publish the article until you say so. Do not rewrite FollowUp.&lt;/p&gt;

                  &lt;/div&gt;
                  Show more
                &lt;/div&gt;
        &lt;/div&gt;
      &lt;/div&gt;

      &lt;div class="agent-session-message agent-session-user"&gt;
        &lt;div class="agent-session-role-badge agent-session-role-user"&gt;
          You
        &lt;/div&gt;
        &lt;div class="agent-session-content"&gt;
                &lt;div&gt;
                  &lt;div class="agent-session-text agent-session-text-collapse"&gt;
                    &lt;p&gt;Yes. Save the DevRelay Agent Session for this work.&lt;/p&gt;

&lt;p&gt;Before submitting it:&lt;br&gt;
1. Curate the session so it clearly shows how DevRelay contributed to preparing my FollowUp Hacktoberfest Weekend Challenge submission.&lt;br&gt;
2. Remove or redact any secrets, API keys, tokens, credentials, private URLs, local machine paths, or other sensitive information.&lt;br&gt;
3. Keep the useful parts: FollowUp inspection, Weekend Challenge verification, DevRelay's role in the submission workflow, and the Agent Session reasoning.&lt;br&gt;
4. Do not modify the FollowUp application code.&lt;br&gt;
5. Submit/save the curated agent session using DevRelay.&lt;br&gt;
6. Give me the resulting session ID or slug and tell me exactly how I make it public on DEV.&lt;/p&gt;

&lt;p&gt;Do not publish my Hacktoberfest article yet.&lt;/p&gt;

                  &lt;/div&gt;
                  Show more
                &lt;/div&gt;
        &lt;/div&gt;
      &lt;/div&gt;

      &lt;div class="agent-session-message agent-session-assistant"&gt;
        &lt;div class="agent-session-role-badge agent-session-role-assistant"&gt;
          Agent
        &lt;/div&gt;
        &lt;div class="agent-session-content"&gt;
                &lt;div class="agent-session-text"&gt;
                  &lt;p&gt;Curation rules applied before submit:&lt;br&gt;
- Kept: public repo and live demo, challenge dates and judging, DevRelay session workflow, Gemma/Backboard category fit, empty-session finding.&lt;br&gt;
- Redacted: local filesystem paths, MLH user IDs, unpublished draft secret URLs, environment variable values, account identifiers.&lt;br&gt;
- Not included: application code changes. FollowUp was not modified.&lt;br&gt;
- Article remains unpublished.&lt;/p&gt;

&lt;p&gt;Submitting this curated transcript to DEV via DevRelay submit_agent_session.&lt;/p&gt;

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

  &lt;div class="agent-session-footer"&gt;
    &lt;span class="agent-session-meta"&gt;
        4 of 4 messages
    &lt;/span&gt;
  &lt;/div&gt;
&lt;/div&gt;






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

&lt;h3&gt;
  
  
  Best Use of Gemma
&lt;/h3&gt;

&lt;p&gt;FollowUp uses &lt;strong&gt;Gemma 3 270M IT&lt;/strong&gt; as its open-weight language model, running locally through Transformers.js and WASM.&lt;/p&gt;

&lt;p&gt;Gemma is part of the core Private Mode architecture rather than being used only as a separate chatbot feature.&lt;/p&gt;

&lt;h3&gt;
  
  
  Best Use of Backboard
&lt;/h3&gt;

&lt;p&gt;FollowUp also uses &lt;strong&gt;Backboard&lt;/strong&gt; for its optional Assisted Mode.&lt;/p&gt;

&lt;p&gt;Backboard provides the hosted RAG path while FollowUp keeps its local/private path separate.&lt;/p&gt;




&lt;p&gt;I built FollowUp for one person because one person's annoying everyday problem was enough.&lt;/p&gt;

&lt;p&gt;My dad didn't need another chatbot.&lt;/p&gt;

&lt;p&gt;He needed to stop asking:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;"Where did I get that?"&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;So I built something that could help him find it  and remember what he needed to do about it. &lt;/p&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

</description>
      <category>devchallenge</category>
      <category>weekendchallenge</category>
      <category>hf26challenge</category>
    </item>
    <item>
      <title>Bringing 3d-blockstack to Life</title>
      <dc:creator>maitri-vv</dc:creator>
      <pubDate>Fri, 31 Oct 2025 07:13:25 +0000</pubDate>
      <link>https://dev.to/maitrivv/bringing-3d-blockstack-to-life-4ba4</link>
      <guid>https://dev.to/maitrivv/bringing-3d-blockstack-to-life-4ba4</guid>
      <description>&lt;h2&gt;
  
  
  &lt;em&gt;🎃 Maintainer Spotlight: Bringing 3d-blockstack to Life&lt;/em&gt;
&lt;/h2&gt;




&lt;p&gt;&lt;strong&gt;Project:&lt;/strong&gt; &lt;a href="https://github.com/maitri-vv/3D-Blockstack" rel="noopener noreferrer"&gt;3D-Blockstack&lt;/a&gt;&lt;/p&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.amazonaws.com%2Fuploads%2Farticles%2Fhmi2a564gvndirek2622.jpg" 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.amazonaws.com%2Fuploads%2Farticles%2Fhmi2a564gvndirek2622.jpg" alt="Hack Rewards" width="800" height="1067"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Hacktoberfest isn't just a month; it's a feeling—especially when you're on the other side of the pull request. For me, the month of October is when my &lt;strong&gt;GitHub activity chart goes from 0 to 100&lt;/strong&gt;, and there's simply nothing more exhilarating. It's a time for finding new tech stacks, squashing bugs, and seeing the open-source community explode with collaborative energy.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;My Hacktoberfest journey started back in my college days, thanks to my &lt;strong&gt;GDSC chapter&lt;/strong&gt;. I was instantly hooked on the thrill of contributing and learning. Now, as a maintainer for &lt;strong&gt;3d-blockstack&lt;/strong&gt;, I get to experience that excitement from a whole new angle.&lt;/p&gt;




&lt;h3&gt;
  
  
  What is &lt;strong&gt;3d-blockstack&lt;/strong&gt; and Why I Maintain It
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;3d-blockstack&lt;/strong&gt; is an open-source, mesmerizing 3D stacking game built using Three.js for captivating graphics and Cannon.js for realistic physics. It challenges players to build the tallest tower by precisely dropping blocks, featuring responsive design, a high score system, and multiple color themes. I maintain it because it’s a perfect sandbox for developers who want a hands-on experience in game development, 3D rendering, and performance optimization—turning challenging code into a truly addictive user experience.&lt;/p&gt;

&lt;p&gt;The best part about being a maintainer is fostering that same spirit of excitement I felt as a first-time contributor. I truly believe that the most valuable contributions often come from fresh eyes. It is surreal to realize that I’m not just leveraging my own skills, but the collective genius of the entire community. Open source embodies the highest form of collaboration, proving that no single person can build a great project alone; like the famous adage, it takes a village of committed contributors to raise a project to its full potential.&lt;/p&gt;




&lt;h3&gt;
  
  
  ✨ How to Contribute to &lt;strong&gt;3d-blockstack&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;If you're looking for a project that offers real-world impact and a welcoming community, look no further! We've made it easy to jump in:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt; &lt;strong&gt;Read the &lt;code&gt;CONTRIBUTING.md&lt;/code&gt;:&lt;/strong&gt; This is your map! It has all the information about our code style, commit conventions, and setup instructions.&lt;/li&gt;
&lt;li&gt; &lt;strong&gt;Look for the Labels:&lt;/strong&gt; We actively label issues with:

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;hacktoberfest&lt;/code&gt;: General issues suitable for the challenge.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;good first issue&lt;/code&gt;: Perfect for beginners or those new to the project.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;enhancement&lt;/code&gt;: Ideas for new features or improvements.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt; &lt;strong&gt;Pick an Issue &amp;amp; Comment:&lt;/strong&gt; Once you find one you like, &lt;strong&gt;comment on the issue&lt;/strong&gt; to let us know you're working on it. This helps prevent multiple people from working on the same thing.&lt;/li&gt;
&lt;li&gt; &lt;strong&gt;Ask Questions!&lt;/strong&gt; Don't struggle in silence. If you get stuck, please reach out via &lt;strong&gt;GitHub Discussions or Discord&lt;/strong&gt;. I'm here to help you get that PR merged!&lt;/li&gt;
&lt;/ol&gt;




&lt;h3&gt;
  
  
  The Hacktoberfest Vibe: A Maintainer's View
&lt;/h3&gt;

&lt;p&gt;As a maintainer during Hacktoberfest, I get to wear a few hats:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;The Reviewer:&lt;/strong&gt; I meticulously check every pull request, focusing on clear communication and constructive feedback.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The Cheerleader:&lt;/strong&gt; Seeing a contributor, especially a new one, solve a challenging issue or implement a requested feature is incredibly rewarding. I make sure to &lt;strong&gt;celebrate every successful merge&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The Vibe Setter:&lt;/strong&gt; My goal is to make sure every contributor feels welcome, understood, and a valuable part of the &lt;strong&gt;3d-blockstack&lt;/strong&gt; family. Getting to know that &lt;strong&gt;vibe&lt;/strong&gt; through comments and discussions is what makes the experience so unique and satisfying.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Hacktoberfest transforms the maintenance experience. We get to &lt;strong&gt;enhance our project&lt;/strong&gt; with diverse skills and perspectives, turning good projects into truly great ones.&lt;/p&gt;




&lt;p&gt;As Hacktoberfest 2025 draws to a close, the true victory isn't measured just in merged PRs, but in the &lt;strong&gt;connections forged&lt;/strong&gt; and the collaborative energy gained. Serving as a maintainer for &lt;strong&gt;3d-blockstack&lt;/strong&gt; has been the most rewarding experience, validating the "village" concept of open source collaboration. Thank you to every single contributor who helped us squash a bug, implement a new feature, and make this project truly shine. It is your enthusiasm that powers the open-source world, and I look forward to carrying this spirit alive every year ahead. &lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;&lt;em&gt;May the open source passion keep your charts green and your projects standing tall! Happy Hacking! 🎃&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

</description>
      <category>devchallenge</category>
      <category>hacktoberfest</category>
      <category>opensource</category>
    </item>
    <item>
      <title>Calling All Contributors: Join the Coffee-Bean Project!</title>
      <dc:creator>maitri-vv</dc:creator>
      <pubDate>Tue, 24 Oct 2023 05:59:42 +0000</pubDate>
      <link>https://dev.to/maitrivv/calling-all-contributors-join-the-coffee-bean-project-1j3d</link>
      <guid>https://dev.to/maitrivv/calling-all-contributors-join-the-coffee-bean-project-1j3d</guid>
      <description>&lt;h2&gt;
  
  
  Introduction
&lt;/h2&gt;

&lt;p&gt;Welcome to the "coffee-bean" project, a delightful open-source project where we brew up the perfect blend of HTML, CSS, and JavaScript. As the project maintainer, I am excited to invite talented developers, designers, and coffee enthusiasts from around the world to join our journey. Whether you're a seasoned coder or just starting your open-source adventure, there's a place for you in our caffeinated world!&lt;/p&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%2Fxe88tkeckm9080gzn6nr.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%2Fxe88tkeckm9080gzn6nr.png" alt="Coffee-Bean Project" width="800" height="724"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  What is Coffee-Bean?
&lt;/h2&gt;

&lt;p&gt;"coffee-bean" is an open-source project aimed at creating a beautiful and responsive website for coffee lovers. It's a virtual coffeehouse where we showcase your love for the brew through code and design. With a foundation of HTML, CSS, and JavaScript, we aim to create a dynamic and interactive website that captivates visitors with the aroma and essence of coffee.&lt;/p&gt;

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

&lt;p&gt;&lt;strong&gt;1. Learning and Growth:&lt;/strong&gt; As a contributor, you'll have the opportunity to learn and improve your skills in web development. Whether it's refining your HTML structure, perfecting CSS styling, or enhancing your JavaScript interactivity, there's something for everyone.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. Real-World Experience:&lt;/strong&gt; "coffee-bean" provides an authentic open-source experience. You'll work on a real project with real users, collaborating with a diverse team of contributors.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3. Portfolio Enhancement:&lt;/strong&gt; Your contributions will be recognized and credited. This project can be a valuable addition to your portfolio, showcasing your skills to potential employers.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;4. A Sense of Community:&lt;/strong&gt; Join a friendly and inclusive community of developers who share a passion for both coffee and code. We're here to support each other, answer questions, and celebrate successes.&lt;/p&gt;

&lt;h2&gt;
  
  
  How to Get Started
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Explore the Repository:&lt;/strong&gt; Visit our &lt;a href="https://github.com/yash19sinha/coffee-bean" rel="noopener noreferrer"&gt;GitHub repository&lt;/a&gt; to get familiar with the project structure, issues, and existing contributions.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Choose an Issue:&lt;/strong&gt; Browse through the existing issues to find something that piques your interest. We label issues to help you identify tasks suitable for your skills.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Fork the Repository:&lt;/strong&gt; Click the "Fork" button on the top-right of the repository page to create your own copy of the project.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Make Your Contribution:&lt;/strong&gt; Work on your chosen issue in your forked repository. Write clean code, test thoroughly, and ensure your changes meet the project's coding standards.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Submit a Pull Request:&lt;/strong&gt; Once you're satisfied with your contribution, submit a pull request to the main repository. Be sure to include a clear description of your changes.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Collaborate and Communicate:&lt;/strong&gt; Engage with the community on the issue and pull request threads. Discuss your approach, ask questions, and make improvements based on feedback.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Contributing Guidelines
&lt;/h2&gt;

&lt;p&gt;To maintain a harmonious and productive environment, we've set up some contributing guidelines. Please review our &lt;a href="https://github.com/yash19sinha/coffee-bean/blob/main/CONTRIBUTING.md" rel="noopener noreferrer"&gt;CONTRIBUTING.md&lt;/a&gt; for detailed instructions on coding standards, workflow, and expectations.&lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;The "coffee-bean" project is a place where you can indulge in your love for coffee and code simultaneously. It's a fun and educational journey where you can contribute, learn, and grow. Whether you're an experienced developer looking for a new challenge or a newbie eager to take your first steps in open source, we welcome you with open arms.&lt;/p&gt;

&lt;p&gt;Together, we can brew something amazing. So, grab your favorite coffee mug, fire up your code editor, and let's create the most aromatic and inviting coffeehouse on the web.&lt;/p&gt;

&lt;p&gt;Let's code over coffee. ☕️&lt;/p&gt;

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

&lt;p&gt;Thank you for considering joining the "coffee-bean" project. We can't wait to see the creativity, skills, and enthusiasm you bring to our virtual coffeehouse. If you have any questions or need assistance, feel free to reach out. Let's make this project a success, one code commit at a time.&lt;/p&gt;

&lt;p&gt;Join the "coffee-bean" community on GitHub today! ☕️&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/yash19sinha/coffee-bean" rel="noopener noreferrer"&gt;GitHub Repository&lt;/a&gt;&lt;/p&gt;

</description>
      <category>hack23maintainer</category>
      <category>beginners</category>
      <category>opensource</category>
      <category>hacktoberfest23</category>
    </item>
    <item>
      <title>Hacktoberfest 2023: Embracing Open Source, Learning, and Gratitude</title>
      <dc:creator>maitri-vv</dc:creator>
      <pubDate>Tue, 24 Oct 2023 05:54:57 +0000</pubDate>
      <link>https://dev.to/maitrivv/hacktoberfest-2023-embracing-open-source-learning-and-gratitude-3i8g</link>
      <guid>https://dev.to/maitrivv/hacktoberfest-2023-embracing-open-source-learning-and-gratitude-3i8g</guid>
      <description>&lt;p&gt;&lt;a href="https://hacktoberfest.com" rel="noopener noreferrer"&gt;Visit hacktoberfest site&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Introduction
&lt;/h2&gt;

&lt;p&gt;As the autumn leaves fall and the air gets crisper, the world of open source software enthusiasts comes alive with anticipation. Hacktoberfest, the month-long celebration of open source contributions, has arrived once again, and it's time to reflect on the journey and express our gratitude for this wonderful initiative. In this post, I will share my personal experience with Hacktoberfest, the value it has added to my life, and the lessons I've learned along the way.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Heartfelt Gratitude
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Expressing Appreciation&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;I would like to begin this post by expressing my heartfelt gratitude towards the Hacktoberfest program. It's more than just a series of events; it's a global community of developers coming together to celebrate open source contributions. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The Spark of Interest&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;My journey with Hacktoberfest started when I first heard about it. I was curious, but I had never ventured into open source contributions before. The idea of contributing to projects I use every day was fascinating. I decided to give it a try, and little did I know that this decision would transform my perspective on collaborative coding.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Importance of Collective Knowledge&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Hacktoberfest isn't just about getting a t-shirt or some cool swag; it's about the collective knowledge-sharing that takes place. It's a unique opportunity to learn and grow as a developer by working alongside some of the brightest minds in the open source community.&lt;/p&gt;

&lt;h2&gt;
  
  
  Lessons Learned
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Lessons from Hacktoberfest
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Setting Realistic Goals&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;One of the key lessons I learned from participating in Hacktoberfest was the importance of setting realistic goals. When I began, I aimed to complete a specific number of pull requests or contribute to a particular project. This approach helped me focus and remain motivated throughout the event.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Documentation and Communication&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Another valuable lesson I gained was the significance of documentation and communication. I had to dig deep into project documentation, communicate with maintainers, and even understand issues and features thoroughly. This experience improved my understanding of projects and enhanced my collaboration skills.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The Iterative Learning Process&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Hacktoberfest presented its fair share of challenges. I encountered technical hurdles and sometimes struggled to grasp project intricacies. However, each challenge made me a better developer. It taught me patience and persistence in the face of adversity, two qualities that have proven invaluable in my career.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Joy of Giving Back
&lt;/h2&gt;

&lt;h3&gt;
  
  
  The Joy of Giving Back to the Community
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Satisfaction in Contribution&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;There is immense satisfaction in contributing to open source projects. It's heartwarming to know that your work can be used by others and make a real-world impact. The feeling of giving back to the community is beyond words.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Nurturing the Open Source Ecosystem&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;While it's important to contribute to open source projects during Hacktoberfest, it's equally crucial to maintain and nurture the open source ecosystem. Many projects are the backbone of our work, and supporting them ensures their longevity and growth.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Continuing the Journey&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Hacktoberfest is just the beginning. Open source contributions shouldn't be confined to a single month. Encourage others to continue their involvement in the open source community year-round. Become a lifelong contributor, and you'll find that the journey is incredibly rewarding.&lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Embrace Hacktoberfest and Grow
&lt;/h3&gt;

&lt;p&gt;In conclusion, Hacktoberfest has been an incredible journey of gratitude, learning, and giving back. The experience has been transformative and has allowed me to see the world of open source in a new light.&lt;/p&gt;

&lt;p&gt;I encourage all developers, whether beginners or experts, to participate in Hacktoberfest 2023. Let my experiences be an inspiration for your own journey. Here are some practical tips to get you started:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Choose Your Projects Wisely:&lt;/strong&gt; Select projects that align with your interests and skills.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Set Realistic Goals:&lt;/strong&gt; Define clear objectives and milestones for your contributions.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Patience and Persistence:&lt;/strong&gt; Embrace the iterative learning process and don't be discouraged by challenges.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Communication is Key:&lt;/strong&gt; Reach out to maintainers, ask questions, and seek guidance when needed.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Give Back Year-round:&lt;/strong&gt; Remember that open source contributions can and should continue beyond Hacktoberfest.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;In the spirit of Hacktoberfest, let's embrace open source, celebrate collaboration, and continue to learn and grow as developers. Here's to a bright future of open source contributions, and I invite you to join me on this incredible journey.&lt;/p&gt;

</description>
      <category>hack23contributor</category>
      <category>hacktoberfest23</category>
      <category>hacktoberfest</category>
      <category>opensource</category>
    </item>
    <item>
      <title>APIs 101 with Postman</title>
      <dc:creator>maitri-vv</dc:creator>
      <pubDate>Wed, 02 Nov 2022 06:05:33 +0000</pubDate>
      <link>https://dev.to/maitrivv/apis-101-with-postman-2138</link>
      <guid>https://dev.to/maitrivv/apis-101-with-postman-2138</guid>
      <description>&lt;p&gt;Here's a Blog on session : &lt;a href="https://medium.com/@maitri.vv/apis-101-with-postman-1a1cfd7acdfe" rel="noopener noreferrer"&gt;https://medium.com/@maitri.vv/apis-101-with-postman-1a1cfd7acdfe&lt;/a&gt;&lt;br&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.amazonaws.com%2Fuploads%2Farticles%2F5pepnbfe4jott6an13br.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.amazonaws.com%2Fuploads%2Farticles%2F5pepnbfe4jott6an13br.png" alt=" " width="800" height="368"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>postmanstudent</category>
      <category>postmanapi</category>
      <category>api</category>
    </item>
  </channel>
</rss>
