<?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: Louis Girifalco</title>
    <description>The latest articles on DEV Community by Louis Girifalco (@quotevote).</description>
    <link>https://dev.to/quotevote</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%2F3416173%2Fcf3d9dfe-ccc3-41a8-a00a-44a196aa79eb.png</url>
      <title>DEV Community: Louis Girifalco</title>
      <link>https://dev.to/quotevote</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/quotevote"/>
    <language>en</language>
    <item>
      <title>Quote.Vote RC2: Phase 7 Is Ready for Parallel Contributors</title>
      <dc:creator>Louis Girifalco</dc:creator>
      <pubDate>Wed, 09 Sep 2026 04:59:38 +0000</pubDate>
      <link>https://dev.to/quotevote/quotevote-rc2-phase-7-is-ready-for-parallel-contributors-3ain</link>
      <guid>https://dev.to/quotevote/quotevote-rc2-phase-7-is-ready-for-parallel-contributors-3ain</guid>
      <description>&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%2Folph727r9f9uwhumldt9.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%2Folph727r9f9uwhumldt9.png" alt=" " width="800" height="533"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This week we announced &lt;strong&gt;Quote.Vote v2 RC2&lt;/strong&gt;, another major milestone in the ongoing rebuild of our open-source platform.&lt;/p&gt;

&lt;p&gt;For anyone new to the project, Quote.Vote is a text-first discussion platform built around a simple idea: instead of reacting only to an entire post, people can respond directly to the specific statements and passages inside it.&lt;/p&gt;

&lt;p&gt;We open-sourced Quote.Vote last year, and since then a growing community of developers has been helping us rebuild the application on a modern technical foundation.&lt;/p&gt;

&lt;p&gt;The goal of the v2 migration has never been to simply make the code newer. We want Quote.Vote to be easier to maintain, easier to test, easier for new developers to understand, and ultimately capable of being maintained by a community rather than depending on one person who knows every corner of the application.&lt;/p&gt;

&lt;p&gt;RC2 is an important step toward that.&lt;/p&gt;

&lt;p&gt;The frontend rebuild is now mature enough that our attention is increasingly shifting to the remaining backend migration. Over the last several weeks, our Lead Developer, Moti Rebuma, and I have reviewed the Phase 7 roadmap against the code that actually exists today, corrected outdated assumptions, mapped dependencies, and reorganized the remaining work into pieces that multiple developers can safely take on at the same time.&lt;/p&gt;

&lt;p&gt;Moti has now completed his technical review, his final feedback has been incorporated into the GitHub issues, and &lt;strong&gt;the next phase is already moving.&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  So what are we actually migrating?
&lt;/h2&gt;

&lt;p&gt;Quote.Vote has been evolving over the course of years, and like many long-running applications, that means parts of the system were built using different generations of technology.&lt;/p&gt;

&lt;p&gt;The v2 frontend is built around &lt;strong&gt;Next.js and TypeScript&lt;/strong&gt;, but parts of the backend still use our older &lt;strong&gt;Mongoose/MongoDB data-access patterns&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;We have already adopted &lt;strong&gt;Prisma&lt;/strong&gt; as the direction for the modernized backend.&lt;/p&gt;

&lt;p&gt;So one of the major remaining Phase 7 goals is straightforward to describe even if the implementation is not:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Move the remaining backend database access from Mongoose to Prisma without changing how Quote.Vote behaves for users.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;During our review, we discovered that the migration was actually farther along than the old roadmap suggested, as much of the GraphQL resolver layer is &lt;strong&gt;already written in TypeScript&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Several roadmap items still described the work as though we needed to convert large parts of the backend from JavaScript to TypeScript. That is no longer the primary challenge.&lt;/p&gt;

&lt;p&gt;The main persistence migration is now:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Mongoose → Prisma&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;That discovery allowed us to simplify the roadmap substantially.&lt;/p&gt;

&lt;h2&gt;
  
  
  We reorganized the migration around the product
&lt;/h2&gt;

&lt;p&gt;Originally, query migrations and mutation migrations were tracked separately. That made sense conceptually, but it made less sense when we thought deeply about the code.&lt;/p&gt;

&lt;p&gt;Quote.Vote's GraphQL resolvers are generally organized around product domains, where the same files can contain several related operations. Asking one developer to migrate "queries" and another to migrate "mutations" could therefore send both developers into the same code.&lt;/p&gt;

&lt;p&gt;Instead, the implementation work is now organized around the actual parts of Quote.Vote.&lt;/p&gt;

&lt;p&gt;The new umbrella is:&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;a href="https://github.com/QuoteVote/quotevote-next/issues/500" rel="noopener noreferrer"&gt;#500 — Domain Resolver Prisma Migration&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;Under it, the migration has been divided into focused domains:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/QuoteVote/quotevote-next/issues/501" rel="noopener noreferrer"&gt;#501 — Posts and Content&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/QuoteVote/quotevote-next/issues/502" rel="noopener noreferrer"&gt;#502 — Comments, Quotes, and Reactions&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/QuoteVote/quotevote-next/issues/503" rel="noopener noreferrer"&gt;#503 — Users and Authentication&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/QuoteVote/quotevote-next/issues/504" rel="noopener noreferrer"&gt;#504 — Messaging&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/QuoteVote/quotevote-next/issues/505" rel="noopener noreferrer"&gt;#505 — Presence and Typing&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/QuoteVote/quotevote-next/issues/506" rel="noopener noreferrer"&gt;#506 — Notifications and Activity&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/QuoteVote/quotevote-next/issues/507" rel="noopener noreferrer"&gt;#507 — Groups, Domains, and Collections&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/QuoteVote/quotevote-next/issues/508" rel="noopener noreferrer"&gt;#508 — Retire Legacy Roster/Buddy Domain&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/QuoteVote/quotevote-next/issues/509" rel="noopener noreferrer"&gt;#509 — Stripe utility data access&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/QuoteVote/quotevote-next/issues/510" rel="noopener noreferrer"&gt;#510 — Shared resolver utilities and remaining resolvers&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This is more than an organizational preference.&lt;/p&gt;

&lt;p&gt;It means a contributor can understand one coherent part of Quote.Vote, migrate that area, preserve its behavior, update its tests, and submit a PR without needing to understand the entire backend first.&lt;/p&gt;

&lt;p&gt;That is exactly the kind of development model we want for the project.&lt;/p&gt;

&lt;h2&gt;
  
  
  Establish the common pattern first
&lt;/h2&gt;

&lt;p&gt;Before several developers start migrating resolvers simultaneously, we also need everyone working from the same underlying pattern.&lt;/p&gt;

&lt;p&gt;That is the purpose of:&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;a href="https://github.com/QuoteVote/quotevote-next/issues/153" rel="noopener noreferrer"&gt;#153 — Integrate Apollo Server with Typed Context&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;In plain language, this establishes a consistent way for the GraphQL backend to access shared application services — including Prisma.&lt;/p&gt;

&lt;p&gt;Rather than individual developers inventing their own way of creating or accessing the Prisma Client, the application will establish one predictable, typed context that resolvers can use.&lt;/p&gt;

&lt;p&gt;For developers, that context will preserve things such as:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Prisma Client&lt;/li&gt;
&lt;li&gt;authenticated user information&lt;/li&gt;
&lt;li&gt;request and response access where necessary&lt;/li&gt;
&lt;li&gt;pub/sub&lt;/li&gt;
&lt;li&gt;request metadata&lt;/li&gt;
&lt;li&gt;existing shared runtime dependencies&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The important architectural rule is that Prisma Client should have an &lt;strong&gt;application-level lifecycle&lt;/strong&gt; rather than being independently created inside individual resolvers or once per request.&lt;/p&gt;

&lt;p&gt;That foundation is no longer theoretical. Shubham Kumar has already submitted &lt;a href="https://github.com/QuoteVote/quotevote-next/pull/518" rel="noopener noreferrer"&gt;PR #518&lt;/a&gt;, which implements the typed GraphQL context and shared Prisma Client pattern. The PR is now going through review before we adopt it as the canonical pattern for the domain migrations that follow.&lt;/p&gt;

&lt;p&gt;Once that pattern is established and accepted, the domain migrations will have a common foundation to build on.&lt;/p&gt;

&lt;h2&gt;
  
  
  What is ready now?
&lt;/h2&gt;

&lt;p&gt;Six Phase 7 domain migrations are currently marked &lt;strong&gt;Ready&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/QuoteVote/quotevote-next/issues/501" rel="noopener noreferrer"&gt;#501 — Posts and Content&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/QuoteVote/quotevote-next/issues/502" rel="noopener noreferrer"&gt;#502 — Comments, Quotes, and Reactions&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/QuoteVote/quotevote-next/issues/503" rel="noopener noreferrer"&gt;#503 — Users and Authentication&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/QuoteVote/quotevote-next/issues/504" rel="noopener noreferrer"&gt;#504 — Messaging&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/QuoteVote/quotevote-next/issues/505" rel="noopener noreferrer"&gt;#505 — Presence and Typing&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/QuoteVote/quotevote-next/issues/506" rel="noopener noreferrer"&gt;#506 — Notifications and Activity&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The first of these, Posts and Content, has already been assigned, giving us an opportunity to validate the shared Prisma/context pattern against a real domain migration once #153 is complete.&lt;/p&gt;

&lt;p&gt;We also have several important pieces moving alongside the domain work.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;a href="https://github.com/QuoteVote/quotevote-next/issues/141" rel="noopener noreferrer"&gt;#141 — Validate GraphQL Schema Generation&lt;/a&gt; — COMPLETED
&lt;/h3&gt;

&lt;p&gt;This work has already landed.&lt;/p&gt;

&lt;p&gt;PR #517 was merged on September 10, adding validation that the migrated backend can reliably construct and execute the GraphQL schema, including resolver bindings, custom scalars, introspection, queries, and mutations.&lt;/p&gt;

&lt;p&gt;That gives the remaining migration work another automated guardrail as contributors begin working across the backend.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;a href="https://github.com/QuoteVote/quotevote-next/issues/147" rel="noopener noreferrer"&gt;#147 — Restore Subscription Resolvers and WebSocket Runtime&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;Our audit showed that this is not simply a matter of translating an old subscription file into TypeScript.&lt;/p&gt;

&lt;p&gt;The current backend needs the actual subscription/WebSocket runtime restored and integrated with the modern architecture.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;a href="https://github.com/QuoteVote/quotevote-next/issues/429" rel="noopener noreferrer"&gt;#429 — Rename &lt;code&gt;Group&lt;/code&gt; to &lt;code&gt;Tag&lt;/code&gt;&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;This fixes some historical terminology.&lt;/p&gt;

&lt;p&gt;What Quote.Vote calls a &lt;strong&gt;Tag&lt;/strong&gt; in the current interface is still represented as &lt;code&gt;Group&lt;/code&gt; in portions of the backend and GraphQL API.&lt;/p&gt;

&lt;p&gt;Cleaning that up first prevents someone from spending time migrating backend terminology that we already know we want to replace.&lt;/p&gt;

&lt;p&gt;The implementation will preserve the existing MongoDB records while renaming the concept at the application layer, avoiding an unnecessary database collection migration.&lt;/p&gt;

&lt;h2&gt;
  
  
  Some work is intentionally blocked
&lt;/h2&gt;

&lt;p&gt;Another improvement to the roadmap is that we are being much more explicit about what &lt;strong&gt;should not be assigned yet&lt;/strong&gt;. This is just as helpful as identifying what is ready.&lt;/p&gt;

&lt;p&gt;The Groups/Domains/Collections Prisma migration waits for the Group → Tag work.&lt;/p&gt;

&lt;p&gt;The legacy Roster/Buddy domain will now be &lt;strong&gt;retired rather than migrated directly to Prisma&lt;/strong&gt;. The surviving responsibilities — including following, messaging, presence, and blocking — will remain in their appropriate domains rather than preserving an obsolete Roster abstraction. That work will become Ready once the shared context established by #153 lands.&lt;/p&gt;

&lt;p&gt;The shared resolver utilities contain some of the heaviest remaining Mongoose usage, including reputation, scoring, Vote, and VoteLog logic. Those should move in coordination with the domains that rely on them.&lt;/p&gt;

&lt;p&gt;Relationship resolvers should migrate after their corresponding parent domains become Prisma-backed.&lt;/p&gt;

&lt;p&gt;And &lt;code&gt;SolidConnection&lt;/code&gt; requires its own Prisma model and migration path before the associated Solid resolvers can leave Mongoose.&lt;/p&gt;

&lt;p&gt;Our goal is to make &lt;strong&gt;safe parallel development possible&lt;/strong&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  The bigger change is the development model
&lt;/h2&gt;

&lt;p&gt;This is the part of RC2 that I am probably most excited about.&lt;/p&gt;

&lt;p&gt;A year ago, Quote.Vote becoming open source mostly meant that the repository was publicly available and people were welcome to contribute.&lt;/p&gt;

&lt;p&gt;Today, something more substantial is starting to exist.&lt;/p&gt;

&lt;p&gt;Developers are finding the project, taking issues, submitting pull requests, returning for additional work, identifying problems we missed, writing tests, reviewing each other's implementations, and helping us understand the architecture better.&lt;/p&gt;

&lt;p&gt;Moti has increasingly taken on technical leadership around architecture, code review, integration, deployment, and helping contributors move their work forward.&lt;/p&gt;

&lt;p&gt;Now other contributors can increasingly take ownership of clearly scoped implementation work.&lt;/p&gt;

&lt;p&gt;We are beginning to see that model operate in practice. One contributor can establish a shared architectural pattern, another can review it from the perspective of the domain that will consume it, and our technical lead can validate the approach before it spreads across the rest of the migration.&lt;/p&gt;

&lt;p&gt;My goal is becoming less about knowing how every piece of the application works and more about helping make sure the project has clear priorities, clear issues, and enough structure for other people to contribute successfully.&lt;/p&gt;

&lt;p&gt;That is a much healthier place for an open-source project to be, so the roadmap itself aims to reflect that change.&lt;/p&gt;

&lt;p&gt;A good issue should increasingly tell a developer:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Here is the problem.&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
&lt;strong&gt;Here is the relevant code.&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
&lt;strong&gt;Here is what must remain unchanged.&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
&lt;strong&gt;Here are the dependencies.&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
&lt;strong&gt;Here is how we know the migration is complete.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;From there our mantra is to let developers build.&lt;/p&gt;

&lt;h2&gt;
  
  
  Want to take one?
&lt;/h2&gt;

&lt;p&gt;If you have contributed to Quote.Vote before, this is an excellent time to jump back in.&lt;/p&gt;

&lt;p&gt;If you are new to the project and comfortable with some combination of &lt;strong&gt;TypeScript, GraphQL, Apollo, Prisma, Node.js, or backend testing&lt;/strong&gt;, there are now several bounded migration issues that should be much easier to approach than the old Phase 7 roadmap.&lt;/p&gt;

&lt;p&gt;Take a look at the issues marked &lt;strong&gt;Ready&lt;/strong&gt;, find something that matches the part of the stack you are interested in, and comment before beginning so we can coordinate assignments.&lt;/p&gt;

&lt;h3&gt;
  
  
  Start here
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;RC2 Beta:&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
&lt;a href="https://beta.quote.vote" rel="noopener noreferrer"&gt;https://beta.quote.vote&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;GitHub Repository:&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
&lt;a href="https://github.com/QuoteVote/quotevote-next" rel="noopener noreferrer"&gt;https://github.com/QuoteVote/quotevote-next&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Phase 7 Prisma Migration:&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
&lt;a href="https://github.com/QuoteVote/quotevote-next/issues/500" rel="noopener noreferrer"&gt;https://github.com/QuoteVote/quotevote-next/issues/500&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;There is still plenty of work between RC2 and the completion of the v2 migration. But we've reached an important point.&lt;/p&gt;

&lt;p&gt;The schema validation guardrail has already landed. The shared Prisma/context foundation is under active review. The first domain migration has an owner. Other domains are ready for contributors. And the dependencies around the remaining work are becoming much clearer.&lt;/p&gt;

&lt;p&gt;Most importantly, the development community around Quote.Vote is increasingly capable of moving that work forward together.&lt;/p&gt;

&lt;p&gt;I want to thank all of the contributors who helped us get here.&lt;/p&gt;

</description>
      <category>opensource</category>
      <category>softwaredevelopment</category>
      <category>webdev</category>
    </item>
    <item>
      <title>The case for claim-level voting (and what breaks in current post voting systems)</title>
      <dc:creator>Louis Girifalco</dc:creator>
      <pubDate>Sat, 04 Apr 2026 13:20:59 +0000</pubDate>
      <link>https://dev.to/quotevote/3-real-use-cases-for-claim-level-voting-and-what-breaks-in-current-post-vote-systems-4c1n</link>
      <guid>https://dev.to/quotevote/3-real-use-cases-for-claim-level-voting-and-what-breaks-in-current-post-vote-systems-4c1n</guid>
      <description>&lt;p&gt;When I first started exploring claim-level discussion (highlighting individual sentences and voting on them), the idea felt abstract.&lt;/p&gt;

&lt;p&gt;So I tried grounding it in real situations where existing tools struggle.&lt;/p&gt;

&lt;p&gt;Here are three that keep coming up:&lt;/p&gt;




&lt;h2&gt;
  
  
  1. Policy &amp;amp; Civic Discussion
&lt;/h2&gt;

&lt;p&gt;Problem:&lt;br&gt;
Long proposals get reduced to binary support/opposition.&lt;/p&gt;

&lt;p&gt;What breaks:&lt;br&gt;
People agree with parts, disagree with others, but have no way to express that nuance.&lt;/p&gt;

&lt;p&gt;What changes:&lt;br&gt;
Each claim can be evaluated independently (agree/disagree, true/false), creating a map of where consensus actually exists.&lt;/p&gt;




&lt;h2&gt;
  
  
  2. Open Source RFCs &amp;amp; Design Docs
&lt;/h2&gt;

&lt;p&gt;Problem:&lt;br&gt;
Feedback lives in comment threads or PR discussions, hard to synthesize.&lt;/p&gt;

&lt;p&gt;What breaks:&lt;br&gt;
Important critiques get buried, and it’s unclear which ideas are broadly supported.&lt;/p&gt;

&lt;p&gt;What changes:&lt;br&gt;
Specific lines or claims can accumulate structured feedback, making it easier to see what holds up.&lt;/p&gt;




&lt;h2&gt;
  
  
  3. Research, Journalism, and Analysis
&lt;/h2&gt;

&lt;p&gt;Problem:&lt;br&gt;
Readers react to entire articles, not specific statements.&lt;/p&gt;

&lt;p&gt;What breaks:&lt;br&gt;
Claims that are contested or unsupported don’t get isolated clearly.&lt;/p&gt;

&lt;p&gt;What changes:&lt;br&gt;
Readers can attach agreement, disagreement, or evidence directly to individual statements.&lt;/p&gt;




&lt;h2&gt;
  
  
  What This Enables
&lt;/h2&gt;

&lt;p&gt;Instead of:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;ranking posts&lt;/li&gt;
&lt;li&gt;arguing in threads&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;You get:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;structured evaluation of ideas&lt;/li&gt;
&lt;li&gt;visibility into agreement vs disagreement&lt;/li&gt;
&lt;li&gt;a dataset tied to language itself&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;I’m building this as an open-source project called Quote.Vote.&lt;/p&gt;

&lt;p&gt;If this resonates, I’d love your feedback:&lt;/p&gt;

&lt;p&gt;Where do you see this working — or breaking?&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%2Fprof63vr8la17779jlc2.jpeg" 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%2Fprof63vr8la17779jlc2.jpeg" alt=" " width="800" height="1455"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>civictech</category>
      <category>opensource</category>
    </item>
    <item>
      <title>What If Online Discussions Were Structured Around Claims Instead of Posts?</title>
      <dc:creator>Louis Girifalco</dc:creator>
      <pubDate>Sun, 15 Mar 2026 02:18:45 +0000</pubDate>
      <link>https://dev.to/quotevote/what-if-online-discussions-were-structured-around-claims-instead-of-posts-5fd6</link>
      <guid>https://dev.to/quotevote/what-if-online-discussions-were-structured-around-claims-instead-of-posts-5fd6</guid>
      <description>&lt;p&gt;Over the last few years I’ve been thinking a lot about a simple question:&lt;/p&gt;

&lt;h2&gt;
  
  
  Why do so many online discussions fail to produce clarity?
&lt;/h2&gt;

&lt;p&gt;Most platforms structure conversation the same way:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;someone writes a post
&lt;/li&gt;
&lt;li&gt;people reply in threads
&lt;/li&gt;
&lt;li&gt;the most visible comments rise through upvotes or engagement
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This structure works well for visibility and participation.&lt;/p&gt;

&lt;p&gt;But it often struggles with something else: &lt;strong&gt;collective reasoning&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;A long thread can contain dozens of arguments, agreements, disagreements, and corrections. Yet the final result rarely becomes clearer over time. New readers must scan hundreds of comments to understand where people actually converge or disagree.&lt;/p&gt;

&lt;p&gt;I began wondering whether the structure of discussion itself might be the limiting factor.&lt;/p&gt;




&lt;h2&gt;
  
  
  A Different Structure
&lt;/h2&gt;

&lt;p&gt;One idea I’ve been exploring treats &lt;strong&gt;claims as first-class objects&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Instead of reacting to an entire post, participants interact with &lt;strong&gt;specific statements&lt;/strong&gt; inside the discussion.&lt;/p&gt;

&lt;p&gt;For example, a discussion might contain claims like:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;"Algorithmic ranking reduces discourse quality."&lt;/li&gt;
&lt;li&gt;"Chronological feeds encourage healthier conversation."&lt;/li&gt;
&lt;li&gt;"Moderation transparency improves community trust."&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Participants can then register:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;agreement
&lt;/li&gt;
&lt;li&gt;disagreement
&lt;/li&gt;
&lt;li&gt;supporting commentary
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;directly on individual claims.&lt;/p&gt;

&lt;p&gt;Over time the thread becomes a &lt;strong&gt;map of contested and convergent ideas&lt;/strong&gt;, rather than a linear list of replies.&lt;/p&gt;




&lt;h2&gt;
  
  
  Why This Might Matter
&lt;/h2&gt;

&lt;p&gt;Many communities depend on discussion quality:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;open-source governance
&lt;/li&gt;
&lt;li&gt;moderation decisions
&lt;/li&gt;
&lt;li&gt;policy debates
&lt;/li&gt;
&lt;li&gt;community standards
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Yet most of our discussion infrastructure evolved from simple comment systems.&lt;/p&gt;

&lt;p&gt;It raises an interesting design question:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Could the structure of conversation itself influence the quality of collective decisions?&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  An Open Question
&lt;/h2&gt;

&lt;p&gt;I’m currently experimenting with this concept in an open-source project and would love feedback from people who run communities or participate in governance discussions.&lt;/p&gt;

&lt;p&gt;Some questions I’m exploring:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Does claim-level voting reduce conversational noise?&lt;/li&gt;
&lt;li&gt;Does it help readers understand where agreement actually exists?&lt;/li&gt;
&lt;li&gt;Does it fragment discussions too much?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If you’ve participated in large open-source communities or moderation systems, I would be very interested in hearing about your experience.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What mechanisms have helped your communities reach clearer decisions during difficult debates?&lt;/strong&gt;&lt;/p&gt;




&lt;p&gt;If you are curious about the experiment I’m building around this idea visit &lt;a href="https://www.quote.vote/" rel="noopener noreferrer"&gt;https://www.quote.vote/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Instead of reacting to entire posts, participants can agree, disagree, or add commentary directly on specific statements. Over time this will produce a visible map of where ideas converge and where they remain contested.&lt;/p&gt;

&lt;p&gt;Quote.Vote is an open-source project, so anyone can setup their own environment.  Help us explore whether structuring discussions around individual claims can improve the quality of online discourse.&lt;/p&gt;

&lt;p&gt;If you’ve worked on governance systems, moderation tools, or large online communities, I would genuinely be interested in hearing what you think would work — or fail — in a system like this.&lt;/p&gt;

</description>
      <category>opensource</category>
      <category>civictech</category>
      <category>webdev</category>
      <category>discuss</category>
    </item>
    <item>
      <title>🎃 Quote.Vote Hacktoberfest 2025 — Building Civic Tech, One Pull Request at a Time</title>
      <dc:creator>Louis Girifalco</dc:creator>
      <pubDate>Mon, 03 Nov 2025 06:05:02 +0000</pubDate>
      <link>https://dev.to/quotevote/quotevote-hacktoberfest-2025-building-civic-tech-one-pull-request-at-a-time-43l1</link>
      <guid>https://dev.to/quotevote/quotevote-hacktoberfest-2025-building-civic-tech-one-pull-request-at-a-time-43l1</guid>
      <description>&lt;p&gt;October was an extraordinary month for &lt;a href="https://www.Quote.Vote/" rel="noopener noreferrer"&gt;Quote.Vote&lt;/a&gt;.&lt;br&gt;&lt;br&gt;
Hacktoberfest gave us the spark we needed to open the doors, welcoming contributors from around the world to help shape the future of a platform that treats communication itself as public infrastructure.  &lt;/p&gt;

&lt;p&gt;Our &lt;a href="https://github.com/orgs/QuoteVote/projects/1" rel="noopener noreferrer"&gt;Hacktoberfest Roadmap board&lt;/a&gt; became a living snapshot of what collaboration looks like in motion. Every issue told a story.  Some of features that shipped cleanly across the finish line, others of ambitious starts, half-built prototypes, deep reviews, and hard lessons learned.  &lt;/p&gt;




&lt;h3&gt;
  
  
  Why People Chose Quote.Vote
&lt;/h3&gt;

&lt;p&gt;When we asked contributors why they picked our project over thousands of others, the answer kept coming back to the mission.&lt;/p&gt;

&lt;p&gt;“It felt like the work mattered.”&lt;/p&gt;

&lt;p&gt;Quote.Vote treats conversation like civic infrastructure, not a commodity. No ads. No engagement algorithms. Just people, text, and respect. A chronological, transparent space for dialogue. That framing gave people a reason to care. &lt;/p&gt;

&lt;p&gt;This was a resounding validation of our approach.  I maintain Quote.Vote because I believe that improving how we communicate online is the first step necessary to solving the world’s biggest problems.  This passion seems to have been found present in our contributors as well.&lt;/p&gt;




&lt;h3&gt;
  
  
  💡 Why Quote.Vote Exists
&lt;/h3&gt;

&lt;p&gt;Our mission is to provide a platform for people to make their voice heard, and find consensus. We build tools that make respectful, evidence-based discussion easier, fairer, and more accessible. If we can elevate the quality of public dialogue, we can rebuild trust in institutions, reduce polarization, and make truth more discoverable.&lt;/p&gt;

&lt;p&gt;Quote.Vote was born from frustration with how social media bends human dialogue toward outrage and profit. We asked a simple question... &lt;em&gt;What if the internet were built for dialogue rather than sensationalism?&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Our mission isn’t driven by growth hacking, or for ad revenue.&lt;br&gt;
We’re building a space for public conversation the way you’d build a public library. Slowly, deliberately, and open for everyone.  &lt;/p&gt;

&lt;p&gt;Hacktoberfest was an invitation for the public to join our civic experiment, and it resonated with so many developers.&lt;/p&gt;

&lt;p&gt;Every contributor who touched the codebase this month helped move us closer to a future where online conversation feels meaningful again and every name will be forever credited publicly for helping build this commons.  We are so grateful.&lt;/p&gt;




&lt;h3&gt;
  
  
  ⚙️ What We Worked On
&lt;/h3&gt;

&lt;p&gt;This year’s Hacktoberfest wasn’t about hitting arbitrary numbers, we just wanted to get the codebase in the hands of the open source community.  But what happened astounded us, as we ended up merging 31 pull requests!&lt;/p&gt;

&lt;p&gt;We explored &lt;strong&gt;dark mode&lt;/strong&gt;, &lt;strong&gt;geo-located quotes&lt;/strong&gt;, and a &lt;strong&gt;rate-limiting system&lt;/strong&gt; to protect the platform from spam.&lt;br&gt;&lt;br&gt;
We dove into &lt;strong&gt;SEO improvements&lt;/strong&gt;, &lt;strong&gt;open graph metadata&lt;/strong&gt;, and &lt;strong&gt;lazy loading&lt;/strong&gt; to make Quote.Vote load faster and share better.&lt;br&gt;&lt;br&gt;
We revisited our &lt;strong&gt;mission page&lt;/strong&gt;, improving accessibility and clarity of message.&lt;br&gt;&lt;br&gt;
We began modernizing the frontend with a &lt;strong&gt;Material-UI v7 upgrade&lt;/strong&gt;, while refining internal structures for &lt;strong&gt;reputation scoring&lt;/strong&gt;, &lt;strong&gt;search improvements&lt;/strong&gt;, and &lt;strong&gt;invite-based onboarding&lt;/strong&gt;.  &lt;/p&gt;

&lt;p&gt;Not every feature crossed the finish line — and that’s okay.&lt;br&gt;&lt;br&gt;
Some are still in review, some blocked, some parked for design iteration. But each conversation, pull request, and review strengthened the foundation we’re building on.  &lt;/p&gt;




&lt;h3&gt;
  
  
  🧠 Lessons in Collaboration
&lt;/h3&gt;

&lt;p&gt;As any maintainer knows, our most important effort is building the connective tissue that lets people work together. During Hacktoberfest, we learned that coordination is our greatest asset.&lt;/p&gt;

&lt;p&gt;By the second week, as PRs piled up and feature branches multiplied, it became clear that coordination and mutual trust would matter more than commits.   So we shifted focus from centralized velocity to cross-review. &lt;/p&gt;

&lt;p&gt;Midway through the month, we reached out to the broader community for help reviewing code and cross-testing new features. That wave of support allowed us to clear our backlog, finalize merges, and finish strong. It proved that open collaboration when nurtured with clarity and trust scales better than any single contributor ever could.&lt;/p&gt;

&lt;p&gt;The result was a team of contributors who had never met before working across time zones to support one another’s work. Through community outreach and open review threads, we found our rhythm and finished the month with a renewed sense of purpose and possibility. &lt;/p&gt;




&lt;h3&gt;
  
  
  ❤️ Reflections and Gratitude
&lt;/h3&gt;

&lt;p&gt;Hacktoberfest 2025 was a true milestone and turning point for our project.&lt;/p&gt;

&lt;p&gt;This month proved that open-source software can be public service, that code reviews can be acts of empathy, and that even a comment on GitHub can move society toward greater understanding.&lt;/p&gt;

&lt;p&gt;Most importantly, it demonstrated that open source can serve not only developers, but democracy itself.&lt;/p&gt;

&lt;p&gt;To everyone who contributed, tested, debugged, or even asked a question, thank you! &lt;/p&gt;

&lt;p&gt;The amazing developers who contributed:&lt;/p&gt;

&lt;p&gt;OtavioXimarelli&lt;br&gt;
DidiNDexter&lt;br&gt;
olivermolina&lt;br&gt;
CynthiaWahome&lt;br&gt;
nur-hasin&lt;br&gt;
Nayan-Kute21&lt;br&gt;
gunjanghate&lt;br&gt;
harshitaphadtare&lt;br&gt;
TechnoBlogger14o3&lt;br&gt;
Om7035&lt;br&gt;
trickster026&lt;br&gt;
motirebuma&lt;br&gt;
Kaif-Imteyaz&lt;br&gt;
Chitransh1011&lt;br&gt;
JnsCas&lt;br&gt;
shubham-01-star&lt;/p&gt;

&lt;p&gt;Thank you!&lt;/p&gt;

&lt;p&gt;Louis Girifalco&lt;br&gt;
Founder, Quote.Vote&lt;/p&gt;

</description>
      <category>devchallenge</category>
      <category>hacktoberfest</category>
      <category>opensource</category>
      <category>webdev</category>
    </item>
    <item>
      <title>🌍 Quote.Vote — An Open-Source Public Square for Respectful Dialogue (Hacktoberfest 2025)</title>
      <dc:creator>Louis Girifalco</dc:creator>
      <pubDate>Thu, 16 Oct 2025 04:27:00 +0000</pubDate>
      <link>https://dev.to/quotevote/quotevote-an-open-source-public-square-for-respectful-dialogue-hacktoberfest-2025-295i</link>
      <guid>https://dev.to/quotevote/quotevote-an-open-source-public-square-for-respectful-dialogue-hacktoberfest-2025-295i</guid>
      <description>&lt;p&gt;Hello everyone 👋  &lt;/p&gt;

&lt;p&gt;This is my first Hacktoberfest as a maintainer, and I’m so excited to open the doors of &lt;strong&gt;Quote.Vote&lt;/strong&gt; to contributors around the world. We’ve prepared a GitHub roadmap full of &lt;code&gt;good first issues&lt;/code&gt; to make onboarding easy and approachable for developers of all experience levels.  &lt;/p&gt;

&lt;p&gt;Within the first day of posting in the official Hacktoberfest Discord, more than twenty contributors joined our roadmap.  &lt;/p&gt;

&lt;p&gt;The bottleneck we’re facing is &lt;strong&gt;code reviews&lt;/strong&gt;. Our core developers are unavailable to provide their time as needed, which means we’re receiving great pull requests faster than we can review them.&lt;br&gt;&lt;br&gt;
&lt;em&gt;&lt;strong&gt;If you’re an experienced developer who enjoys reading code, mentoring others, or improving collaboration workflows, we’d love your help reviewing PRs this month.&lt;/strong&gt;&lt;/em&gt;&lt;br&gt;&lt;br&gt;
Timely feedback is vital for new contributors, and your support in reviewing code will directly help us maintain that rhythm and momentum.  &lt;/p&gt;

&lt;p&gt;👉 &lt;strong&gt;Join our community:&lt;/strong&gt; &lt;a href="https://discord.gg/3ycdHpJzE" rel="noopener noreferrer"&gt;discord.gg/3ycdHpJzE&lt;/a&gt;&lt;/p&gt;




&lt;h3&gt;
  
  
  Why Quote.Vote Exists
&lt;/h3&gt;

&lt;p&gt;Quote.Vote was born from frustration with how today’s platforms warp dialogue through algorithms and ads. Many across the internet want an online space purely for respectful conversation, without anyone trying to capture attention for profit.&lt;br&gt;&lt;br&gt;
Growth hacking and monetization is not the priority, instead we focus on building civic infrastructure as if it were a public library. Every line of code adds up to one question: &lt;em&gt;What if the internet were built for dialogue rather than sensationalism?&lt;/em&gt;  &lt;/p&gt;

&lt;p&gt;Hacktoberfest, for us, is about welcoming people into our civic experiment. Every contributor will be credited publicly on our site, and your name will be permanently associated with building a space that treats online conversation as a public good.  &lt;/p&gt;




&lt;h3&gt;
  
  
  How It Works
&lt;/h3&gt;

&lt;p&gt;The platform is radically simple: a &lt;strong&gt;quote&lt;/strong&gt;, a &lt;strong&gt;response&lt;/strong&gt;, a &lt;strong&gt;conversation thread&lt;/strong&gt;. Think of it as a digital town hall where everyone can participate on equal footing.&lt;br&gt;&lt;br&gt;
Quote.Vote revolves around quotes as sparks for conversation rather than as weapons or out-of-context soundbites.  &lt;/p&gt;

&lt;p&gt;It’s a nonprofit project, building an open-source platform licensed under &lt;strong&gt;AGPL&lt;/strong&gt;, ensuring it will always remain a public good.&lt;br&gt;&lt;br&gt;
No ads, no algorithms, just people, text, and respect.  &lt;/p&gt;




&lt;h3&gt;
  
  
  Under the Hood
&lt;/h3&gt;

&lt;p&gt;Quote.Vote runs on a &lt;strong&gt;React frontend&lt;/strong&gt;, using a &lt;strong&gt;GraphQL API&lt;/strong&gt; to communicate with a &lt;strong&gt;MongoDB backend&lt;/strong&gt;.&lt;br&gt;&lt;br&gt;
The architecture is modular, so contributors can work independently without needing to understand the entire system on day one.  &lt;/p&gt;

&lt;p&gt;At its heart, Quote.Vote is built on the belief that &lt;strong&gt;dialogue itself is civic infrastructure&lt;/strong&gt;.&lt;br&gt;&lt;br&gt;
We reject extractive models of platform building and treat &lt;strong&gt;stewardship—not ownership—&lt;/strong&gt;as our guiding principle.  &lt;/p&gt;




&lt;h3&gt;
  
  
  How to Contribute
&lt;/h3&gt;

&lt;p&gt;If you’ve ever wanted your code to directly support democracy and dialogue, this is your chance.&lt;br&gt;&lt;br&gt;
Contributing to Quote.Vote means you’re shaping a piece of civic infrastructure. We welcome you, and Hacktoberfest is the perfect moment to make your first pull request.  &lt;/p&gt;

&lt;p&gt;Joining Quote.Vote during Hacktoberfest means joining a community that values humility, openness, and shared responsibility.&lt;br&gt;&lt;br&gt;
We’d love for you to join us this October and help shape what respectful online dialogue can look like.  &lt;/p&gt;

&lt;p&gt;👉 &lt;strong&gt;Quote.Vote Hacktoberfest Roadmap&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
&lt;a href="https://github.com/orgs/QuoteVote/projects/1" rel="noopener noreferrer"&gt;github.com/orgs/QuoteVote/projects/1&lt;/a&gt;&lt;/p&gt;

</description>
      <category>devchallenge</category>
      <category>hacktoberfest</category>
      <category>opensource</category>
      <category>help</category>
    </item>
    <item>
      <title>🌍 Quote.Vote | An Open-Source Public Square for Respectful Dialogue (Hacktoberfest 2025)</title>
      <dc:creator>Louis Girifalco</dc:creator>
      <pubDate>Thu, 02 Oct 2025 04:00:57 +0000</pubDate>
      <link>https://dev.to/quotevote/quotevote-an-open-source-public-square-for-respectful-dialogue-hacktoberfest-2025-38b6</link>
      <guid>https://dev.to/quotevote/quotevote-an-open-source-public-square-for-respectful-dialogue-hacktoberfest-2025-38b6</guid>
      <description>&lt;p&gt;Hello everyone 👋&lt;/p&gt;

&lt;p&gt;This Hacktoberfest, We’d like to introduce &lt;a href="https://www.quote.vote/" rel="noopener noreferrer"&gt;Quote.Vote&lt;/a&gt; the nonprofit, open-source platform for text-based dialogue. It’s designed as civic infrastructure to serve as a public square where people can quote, vote, respond, and deliberate respectfully with no ads and no algorithms.&lt;/p&gt;

&lt;p&gt;⚙️ Tech Stack: React/Next.js frontend, GraphQL API, and a MongoDB backend. Made to be approachable for anyone familiar with modern JavaScript frameworks.&lt;/p&gt;

&lt;p&gt;We’ve prepared a roadmap on GitHub with good first issues to make onboarding smooth for contributors of all levels. Whether you enjoy frontend, backend, or documentation, you’ll find clear entry points to get started.&lt;/p&gt;

&lt;p&gt;👉 &lt;a href="https://github.com/orgs/QuoteVote/projects/1/views/1" rel="noopener noreferrer"&gt;Quote.Vote Hacktoberfest Roadmap&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;🚀 How you can help:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Pick up a labeled issue from the Hacktoberfest roadmap&lt;/li&gt;
&lt;li&gt;Open a PR — we’ll be reviewing daily throughout October&lt;/li&gt;
&lt;li&gt;Get recognized on our public Contributors page&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Thanks for checking us out, and happy Hacktoberfest!&lt;/p&gt;

&lt;p&gt;Louis Girifalco&lt;br&gt;
Founder, Quote.Vote&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%2Fxdlgw4gd29tmcvphhudz.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%2Fxdlgw4gd29tmcvphhudz.png" alt=" " width="500" height="500"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>hacktoberfest</category>
      <category>civictech</category>
      <category>opensource</category>
      <category>react</category>
    </item>
  </channel>
</rss>
