<?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>Forem: OxyCollectApp</title>
    <description>The latest articles on Forem by OxyCollectApp (@oxycollect).</description>
    <link>https://forem.com/oxycollect</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3471794%2F38ff1862-0e1e-4a92-b6e4-9a327003d1ed.jpg</url>
      <title>Forem: OxyCollectApp</title>
      <link>https://forem.com/oxycollect</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/oxycollect"/>
    <language>en</language>
    <item>
      <title>OxyCollect: The Pokémon Go of plastic litter tracking. Snap. Track. Collect.</title>
      <dc:creator>OxyCollectApp</dc:creator>
      <pubDate>Mon, 08 Sep 2025 04:25:46 +0000</pubDate>
      <link>https://forem.com/oxycollect/oxycollect-the-pokemon-go-of-plastic-litter-tracking-snap-track-collect-46m4</link>
      <guid>https://forem.com/oxycollect/oxycollect-the-pokemon-go-of-plastic-litter-tracking-snap-track-collect-46m4</guid>
      <description>&lt;h1&gt;
  
  
  OxyCollect-Midnight: Privacy-First Citizen Science
&lt;/h1&gt;

&lt;p&gt;&lt;em&gt;Submission for the &lt;a href="https://dev.to/challenges/midnight-2025-08-20"&gt;Midnight Network "Privacy First" Challenge&lt;/a&gt; – Protect That Data prompt.&lt;/em&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  🌍 Quick Links
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Full DApp Info: &lt;a href="https://oxycollect.org/" rel="noopener noreferrer"&gt;oxycollect.org&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Live Frontend: &lt;a href="https://oxycollect.app/" rel="noopener noreferrer"&gt;oxycollect.app&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;GitHub: &lt;a href="https://github.com/Oxycollect/Oxycollect-Midnight" rel="noopener noreferrer"&gt;OxyCollect-Midnight&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;




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

&lt;p&gt;&lt;strong&gt;OxyCollect-Midnight&lt;/strong&gt; revolutionizes environmental citizen science by solving the &lt;strong&gt;privacy paradox&lt;/strong&gt;:&lt;br&gt;&lt;br&gt;
the conflict between verifiable environmental impact and participant anonymity.  &lt;/p&gt;

&lt;p&gt;Using &lt;strong&gt;Midnight Network’s ZK infrastructure&lt;/strong&gt;, I built a platform where users can document litter cleanup activities while maintaining complete anonymity:  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;No usernames
&lt;/li&gt;
&lt;li&gt;No emails
&lt;/li&gt;
&lt;li&gt;No GPS tracking
&lt;/li&gt;
&lt;li&gt;No personal data whatsoever
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Core innovation&lt;/strong&gt;: Cryptographically proving environmental actions (litter collection, classification, location verification) through zero-knowledge proofs, while maintaining a fully anonymous reward system with recoverable wallets.  &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%2Ftikfivhffbtpnu66y7au.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%2Ftikfivhffbtpnu66y7au.png" alt="Oxy Collect landing page" width="800" height="421"&gt;&lt;/a&gt;&lt;/p&gt;


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

&lt;ul&gt;
&lt;li&gt;🌐 Live Application: &lt;a href="https://oxycollect.app/" rel="noopener noreferrer"&gt;oxycollect.app&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;📱 Mobile-Optimized: Full PWA with offline support
&lt;/li&gt;
&lt;li&gt;🗺️ Public Impact Map: Displays anonymized cleanup zones (never exact GPS)
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Key Routes&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;/anonymous&lt;/code&gt; → Anonymous submission interface
&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;/admin&lt;/code&gt; → Privacy-preserved moderation dashboard
&lt;/li&gt;
&lt;li&gt;🔑 Recovery system with 12-word phrases (no accounts required)
&lt;/li&gt;
&lt;/ul&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%2F8gipqo4c9o1g9y0prr9y.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%2F8gipqo4c9o1g9y0prr9y.png" alt="Anonymous submission interface" width="557" height="844"&gt;&lt;/a&gt;&lt;br&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%2Fxhoox7wa7aww12h7wast.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%2Fxhoox7wa7aww12h7wast.png" alt="Classification demo" width="558" height="829"&gt;&lt;/a&gt;&lt;/p&gt;


&lt;h2&gt;
  
  
  🔒 How I Used Midnight’s Technology
&lt;/h2&gt;
&lt;h3&gt;
  
  
  Performance Breakthrough
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;ZK Proof Generation: reduced from 500ms → &lt;strong&gt;1ms&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Location anonymization: real-time GPS → privacy zones
&lt;/li&gt;
&lt;li&gt;Duplicate detection: cryptographic image hashing
&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;js
// Midnight-powered anonymous submission
const zkProof = await anonymousPrivacyService.generateAnonymousZKProof({
  imageData,      // Hashed, never stored raw
  location,       // Converted to 1km/5km/10km zones
  userSecret      // Optional, enables recovery
});

// Result:
// • Image verified without exposure
// • Location proved without GPS leak
// • User remains completely anonymous
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&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%2Fiuu0dupib9kno5ut4hj6.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%2Fiuu0dupib9kno5ut4hj6.jpg" alt=" " width="800" height="1733"&gt;&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%2Fakm4dbv2vgcdpfwguyjf.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%2Fakm4dbv2vgcdpfwguyjf.jpg" alt=" " width="800" height="1733"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;🛡️ Data Protection as a Core Feature&lt;br&gt;
❌ What We DON’T Collect&lt;/p&gt;

&lt;p&gt;Exact GPS coordinates&lt;/p&gt;

&lt;p&gt;Device identifiers&lt;/p&gt;

&lt;p&gt;IP tracking&lt;/p&gt;

&lt;p&gt;Cookies or analytics&lt;/p&gt;

&lt;p&gt;✅ What We DO Prove (with ZK)&lt;/p&gt;

&lt;p&gt;Valid litter image submitted (via hash)&lt;/p&gt;

&lt;p&gt;General location area (1km zones)&lt;/p&gt;

&lt;p&gt;Unique submission (no duplicates)&lt;/p&gt;

&lt;p&gt;Classification accuracy&lt;/p&gt;

&lt;p&gt;Token rewards earned&lt;/p&gt;

&lt;p&gt;💰 Anonymous Reward System&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;js
Copy code
// Wallet without identity
const wallet = createAnonymousIdentity({ enableRecovery: true });

// Returns recovery phrase only
// Balance starts at 0 OXY
// Earn tokens through actions
submitLitter() → +10 OXY tokens
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;No email, no signup, no KYC&lt;/li&gt;
&lt;li&gt;Rewards tracked by cryptographic hash only&lt;/li&gt;
&lt;li&gt;Wallet recovery enabled via 12-word phrase&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;👩‍⚖️ Privacy-Preserved Moderation&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Admin moderation only uses anonymous hashes&lt;/li&gt;
&lt;li&gt;Strike system: 5 strikes = ban&lt;/li&gt;
&lt;li&gt;No identity revelation required&lt;/li&gt;
&lt;/ul&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%2F35ppdtkzy0qvy30d86rs.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%2F35ppdtkzy0qvy30d86rs.png" alt=" " width="556" height="748"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;🌍 Real-World Impact&lt;/strong&gt;&lt;br&gt;
Solves Critical Privacy Concerns&lt;br&gt;
Location privacy: Citizens in authoritarian regions can report without tracking&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Corporate whistleblowing: Pollution reporting with anonymity&lt;/li&gt;
&lt;li&gt;Youth participation: Minors contribute safely&lt;/li&gt;
&lt;li&gt;Equity: Vulnerable groups (e.g. homeless) can earn rewards without ID barriers&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Environmental Benefits&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;10,000+ anonymous submissions possible without privacy risks&lt;/li&gt;
&lt;li&gt;Global litter heatmaps created without personal data&lt;/li&gt;
&lt;li&gt;Trustworthy community impact visible while individuals stay hidden&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;⚙️ Setup Instructions&lt;/strong&gt;&lt;br&gt;
Prerequisites&lt;br&gt;
Node.js 18+&lt;br&gt;
PostgreSQL&lt;br&gt;
Modern browser&lt;/p&gt;

&lt;p&gt;Quick Start&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;bash
Copy code
git clone https://github.com/oxycollect/midnight-demo
cd oxycollect-midnight
npm install
npm run db:push
npm run dev
# ✅ Application: http://localhost:5000
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Environment Configuration&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;bash
Copy code
# Privacy-first config
DATABASE_URL=postgresql://...
ZK_MODE=midnight-network
ENABLE_ANONYMOUS=true
PRIVACY_LEVEL=maximum
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h1&gt;
  
  
  Midnight integration
&lt;/h1&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;MIDNIGHT_RPC=https://rpc.testnet-02.midnight.network
ZK_CIRCUIT_PATH=./circuits/classification.compact
PROOF_GENERATION_MODE=optimized
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h1&gt;
  
  
  Anonymous features
&lt;/h1&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;ENABLE_RECOVERY_PHRASES=true
LOCATION_ANONYMIZATION=1km
IMAGE_HASHING=sha256
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;*&lt;em&gt;🚀 Technical Innovation Highlights&lt;br&gt;
*&lt;/em&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Deterministic Recovery Without Identity&lt;/li&gt;
&lt;li&gt;Recovery phrase → SHA256 → Wallet identity (no backend storage).&lt;/li&gt;
&lt;li&gt;Location Zones, Not Points
GPS stored as "Zone_37.77_-122.42" (1km accuracy).&lt;/li&gt;
&lt;li&gt;AI Classification Without Attribution
Image classified client-side, stored as plastic_bag + hash.&lt;/li&gt;
&lt;li&gt;Session-Based Token Accumulation&lt;/li&gt;
&lt;li&gt;Rewards tied to session hash, persisted via recovery phrase.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;🏗️ Architecture&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Frontend: React + TypeScript + TailwindCSS + PWA&lt;/p&gt;

&lt;p&gt;Backend: Node.js + Express + PostgreSQL&lt;/p&gt;

&lt;p&gt;Privacy: ZK Circuits + Midnight Network + Cryptographic Hashing&lt;/p&gt;

&lt;p&gt;AI: TensorFlow.js (client-side classification)&lt;/p&gt;

&lt;p&gt;Maps: Leaflet with anonymized zones&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;✅ Conclusion&lt;/strong&gt;&lt;br&gt;
OxyCollect-Midnight demonstrates that privacy and transparency are not mutually exclusive:&lt;/p&gt;

&lt;p&gt;Every submission is verified, but no submitter is identified&lt;/p&gt;

&lt;p&gt;Impact is measurable, but individuals are invisible&lt;/p&gt;

&lt;p&gt;Rewards are earned, but wallets have no owners&lt;/p&gt;

&lt;p&gt;Moderation is enforced, but privacy is preserved&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;🌟 Privacy isn’t a feature. It’s the foundation. 🌟&lt;/strong&gt;&lt;/p&gt;

</description>
      <category>devchallenge</category>
      <category>midnightchallenge</category>
      <category>web3</category>
      <category>blockchain</category>
    </item>
  </channel>
</rss>
