<?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: Eduard Constantin</title>
    <description>The latest articles on DEV Community by Eduard Constantin (@_eduard26).</description>
    <link>https://dev.to/_eduard26</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%2F832301%2F1ff01b77-ea3e-4663-814e-37f3fc8f57dc.jpg</url>
      <title>DEV Community: Eduard Constantin</title>
      <link>https://dev.to/_eduard26</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/_eduard26"/>
    <language>en</language>
    <item>
      <title>Ghosts of the Feed: A Día de los Muertos Ofrenda for Forgotten Bookmarks with Gemma 3, ElevenLabs &amp; Tiger Data</title>
      <dc:creator>Eduard Constantin</dc:creator>
      <pubDate>Wed, 28 Oct 2026 20:09:20 +0000</pubDate>
      <link>https://dev.to/_eduard26/ghosts-of-the-feed-a-dia-de-los-muertos-ofrenda-for-forgotten-bookmarks-with-gemma-3-elevenlabs--4a87</link>
      <guid>https://dev.to/_eduard26/ghosts-of-the-feed-a-dia-de-los-muertos-ofrenda-for-forgotten-bookmarks-with-gemma-3-elevenlabs--4a87</guid>
      <description>&lt;p&gt;&lt;em&gt;This is a submission for the &lt;a href="https://dev.to/challenges/hacktoberfest-week4-2026-10-26"&gt;Hacktoberfest Open-Source AI Challenge Week 4: Ghost in the Machine&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

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

&lt;p&gt;Every developer's bookmark folder is a quiet graveyard of good intentions. Over the last eight years, I bookmarked &lt;strong&gt;1,832 posts&lt;/strong&gt; on X/Twitter — clever Unity water shaders from 2019, procedural foliage breakdowns, weekend game-jam physics toys, and open-weight model releases — telling myself &lt;em&gt;"I'll build something with this on Saturday."&lt;/em&gt; Almost none of them were ever opened again.&lt;/p&gt;

&lt;p&gt;For &lt;strong&gt;Week 4: Ghost in the Machine&lt;/strong&gt; — where Halloween meets &lt;strong&gt;Día de los Muertos&lt;/strong&gt; — I built &lt;strong&gt;Ghosts of the Feed&lt;/strong&gt;: an interactive digital &lt;em&gt;ofrenda&lt;/em&gt; (altar) that honors those forgotten ideas and lets them speak back.&lt;/p&gt;

&lt;p&gt;Instead of a cold productivity dashboard, &lt;strong&gt;Ghosts of the Feed&lt;/strong&gt; treats every saved post as a spirit waiting in the dark:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Candlelit Ofrenda Shelf&lt;/strong&gt;: Each bookmark is placed on a velvet altar card with a flickering votive flame, a badge showing how long it has waited (some for &lt;strong&gt;8 years&lt;/strong&gt;), and a pulsing marigold whisper (&lt;em&gt;"Unheard since you bookmarked me — Light candle &amp;amp; listen →"&lt;/em&gt;).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;In-Browser Séance with Google Gemma 3 270M&lt;/strong&gt;: When you bring a card to the altar and press &lt;strong&gt;✦ Summon this ghost&lt;/strong&gt;, &lt;code&gt;onnx-community/gemma-3-270m-it-ONNX&lt;/code&gt; runs 100% locally inside a browser Web Worker via &lt;code&gt;@huggingface/transformers&lt;/code&gt;. Speaking in the first person &lt;em&gt;as that forgotten post&lt;/em&gt;, Gemma remembers what it was when you saved it and proposes one concrete thing you can still build with it today.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Spectral Voice via ElevenLabs&lt;/strong&gt;: As soon as Gemma finishes writing the ghost's response, &lt;strong&gt;ElevenLabs&lt;/strong&gt; (&lt;code&gt;eleven_multilingual_v2&lt;/code&gt;) speaks the epitaph aloud while the altar candle flares in sync (with a zero-config Web Speech fallback for judges testing without an API key).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Eternal Memory &amp;amp; Hybrid Search via Tiger Data&lt;/strong&gt;: Powered by &lt;strong&gt;Tiger Cloud (&lt;code&gt;TimescaleDB&lt;/code&gt; + &lt;code&gt;pgvector&lt;/code&gt; + &lt;code&gt;pg_textsearch&lt;/code&gt;)&lt;/strong&gt;, the app tracks your bookmark history in time-partitioned hypertables, fuses semantic vector search (&lt;code&gt;halfvec(384)&lt;/code&gt;) with BM25 keyword search via &lt;strong&gt;Reciprocal Rank Fusion (RRF)&lt;/strong&gt;, and permanently carves each summoned ghost's epitaph into stone so answered spirits turn jade on the shelf (&lt;strong&gt;Put to Rest&lt;/strong&gt;).&lt;/li&gt;
&lt;/ul&gt;




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

&lt;h3&gt;
  
  
  1. The Candlelit Altar Shrine (&lt;code&gt;Gemma 3 270M&lt;/code&gt; in-browser ONNX + &lt;code&gt;ElevenLabs&lt;/code&gt; neural voice)
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F5r1nsn4nrtlwyzpzu39y.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%2F5r1nsn4nrtlwyzpzu39y.png" alt="Ghosts of the Feed — Altar Shrine" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  2. The Ofrenda Shelf &amp;amp; Timeline of the Unanswered (&lt;code&gt;TimescaleDB&lt;/code&gt; Continuous Aggregate + &lt;code&gt;seance_rituals&lt;/code&gt; Hypertable)
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fu588albabay7z1qldpwz.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%2Fu588albabay7z1qldpwz.png" alt="Ghosts of the Feed — Ofrenda Cards &amp;amp; Timeline" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  3. Hybrid Semantic + Keyword Search (&lt;code&gt;pgvector&lt;/code&gt; HNSW Cosine + &lt;code&gt;pg_textsearch&lt;/code&gt; BM25 via Reciprocal Rank Fusion)
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F21dmrzennlc6ltf3ih2u.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%2F21dmrzennlc6ltf3ih2u.png" alt="Ghosts of the Feed — Tiger Data Hybrid RRF Search" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Run the Demo Locally in 60 Seconds (Zero Login or API Keys Required)
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git clone https://github.com/eduardconstantin/ghosts-of-the-feed.git
&lt;span class="nb"&gt;cd &lt;/span&gt;ghosts-of-the-feed
npm &lt;span class="nb"&gt;install
&lt;/span&gt;npm run dev
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;ol&gt;
&lt;li&gt;Open &lt;code&gt;http://localhost:5173&lt;/code&gt;. The repo ships with &lt;code&gt;public/bookmarks-demo.json&lt;/code&gt; and a pre-seeded Tiger Data snapshot (&lt;code&gt;src/tiger-cache.json&lt;/code&gt;) so the timeline, hybrid RRF search, and séance work out of the box with zero credentials.&lt;/li&gt;
&lt;li&gt;Click any offering card on the shelf (or filter by year in the &lt;strong&gt;Timeline of the Unanswered (2018 – 2026)&lt;/strong&gt; bar chart).&lt;/li&gt;
&lt;li&gt;Click &lt;strong&gt;✦ Summon this ghost&lt;/strong&gt; at the altar. On the first summon, &lt;code&gt;Gemma 3 270M&lt;/code&gt; (&lt;code&gt;fp16&lt;/code&gt; ONNX) downloads into your browser cache and generates the ghost's first-person reply on your machine.&lt;/li&gt;
&lt;li&gt;Type a mood or concept into the search bar — e.g. &lt;code&gt;abandoned shader water unity&lt;/code&gt; — to see &lt;strong&gt;Tiger Data Reciprocal Rank Fusion&lt;/strong&gt; rank ghosts by combined &lt;code&gt;pgvector&lt;/code&gt; HNSW cosine similarity (&lt;code&gt;VEC #1&lt;/code&gt;) and &lt;code&gt;pg_textsearch&lt;/code&gt; BM25 rank (&lt;code&gt;BM25 #2&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;
&lt;em&gt;(Optional)&lt;/em&gt; Add &lt;code&gt;ELEVENLABS_API_KEY&lt;/code&gt; and &lt;code&gt;TIGER_DATABASE_URL&lt;/code&gt; in &lt;code&gt;.env&lt;/code&gt; (see &lt;code&gt;.env.example&lt;/code&gt;) to enable live ElevenLabs neural speech and live Tiger Cloud writes.&lt;/li&gt;
&lt;/ol&gt;


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

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;GitHub Repository (MIT Licensed)&lt;/strong&gt;: &lt;a href="https://github.com/eduardconstantin/ghosts-of-the-feed" rel="noopener noreferrer"&gt;https://github.com/eduardconstantin/ghosts-of-the-feed&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&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/eduardconstantin" rel="noopener noreferrer"&gt;
        eduardconstantin
      &lt;/a&gt; / &lt;a href="https://github.com/eduardconstantin/ghosts-of-the-feed" rel="noopener noreferrer"&gt;
        ghosts-of-the-feed
      &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;Ghosts of the Feed&lt;/h1&gt;
&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;An interactive Día de los Muertos ofrenda for forgotten X/Twitter bookmarks — powered by in-browser open-weight AI (&lt;code&gt;Gemma 3 270M&lt;/code&gt;), &lt;code&gt;ElevenLabs&lt;/code&gt; neural voice, and &lt;code&gt;Tiger Data&lt;/code&gt; (&lt;code&gt;TimescaleDB&lt;/code&gt; + &lt;code&gt;pgvector&lt;/code&gt; + &lt;code&gt;pg_textsearch&lt;/code&gt; BM25).&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Built for the &lt;strong&gt;&lt;a href="https://dev.to/challenges/hacktoberfest-week4-2026-10-26" rel="nofollow"&gt;Hacktoberfest 2026 Open-Source AI Challenge: Week 4 ("Ghost in the Machine")&lt;/a&gt;&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a rel="noopener noreferrer" href="https://github.com/eduardconstantin/ghosts-of-the-feed/./docs/screenshots/altar-shrine.png"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fraw.githubusercontent.com%2Feduardconstantin%2Fghosts-of-the-feed%2FHEAD%2F.%2Fdocs%2Fscreenshots%2Faltar-shrine.png" alt="Ghosts of the Feed — Candlelit Altar Shrine"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Screenshots&lt;/h2&gt;
&lt;/div&gt;

&lt;div class="markdown-heading"&gt;
&lt;h3 class="heading-element"&gt;1. The Altar Shrine (&lt;code&gt;Gemma 3 270M&lt;/code&gt; + &lt;code&gt;ElevenLabs&lt;/code&gt; + &lt;code&gt;Tiger Data&lt;/code&gt;)&lt;/h3&gt;
&lt;/div&gt;

&lt;p&gt;&lt;a rel="noopener noreferrer" href="https://github.com/eduardconstantin/ghosts-of-the-feed/./docs/screenshots/altar-shrine.png"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fraw.githubusercontent.com%2Feduardconstantin%2Fghosts-of-the-feed%2FHEAD%2F.%2Fdocs%2Fscreenshots%2Faltar-shrine.png" alt="Ghosts of the Feed Altar Shrine"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;div class="markdown-heading"&gt;
&lt;h3 class="heading-element"&gt;2. The Ofrenda Shelf &amp;amp; Timeline of the Unanswered (&lt;code&gt;TimescaleDB&lt;/code&gt; Continuous Aggregate)&lt;/h3&gt;

&lt;/div&gt;

&lt;p&gt;&lt;a rel="noopener noreferrer" href="https://github.com/eduardconstantin/ghosts-of-the-feed/./docs/screenshots/ofrenda-shelf.png"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fraw.githubusercontent.com%2Feduardconstantin%2Fghosts-of-the-feed%2FHEAD%2F.%2Fdocs%2Fscreenshots%2Fofrenda-shelf.png" alt="Ghosts of the Feed Ofrenda Shelf"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;div class="markdown-heading"&gt;
&lt;h3 class="heading-element"&gt;3. Hybrid Semantic + Keyword Search (&lt;code&gt;pgvector&lt;/code&gt; HNSW Cosine + &lt;code&gt;pg_textsearch&lt;/code&gt; BM25 RRF)&lt;/h3&gt;

&lt;/div&gt;

&lt;p&gt;&lt;a rel="noopener noreferrer" href="https://github.com/eduardconstantin/ghosts-of-the-feed/./docs/screenshots/tiger-hybrid-search.png"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fraw.githubusercontent.com%2Feduardconstantin%2Fghosts-of-the-feed%2FHEAD%2F.%2Fdocs%2Fscreenshots%2Ftiger-hybrid-search.png" alt="Tiger Data Hybrid RRF Search"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Why We Built It&lt;/h2&gt;

&lt;/div&gt;

&lt;p&gt;Every developer's X bookmarks folder is a graveyard of good intentions — shaders we meant to study, papers we swore we'd read, weekend game-jam mechanics from seven years ago that we saved and never opened again.&lt;/p&gt;

&lt;p&gt;In the spirit of &lt;strong&gt;Día de los Muertos&lt;/strong&gt; and &lt;strong&gt;Ghost in the Machine&lt;/strong&gt;…&lt;/p&gt;&lt;/div&gt;


&lt;/div&gt;
&lt;br&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/eduardconstantin/ghosts-of-the-feed" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;br&gt;
&lt;/div&gt;
&lt;br&gt;





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



&lt;pre data-lang="mermaid"&gt;&lt;code&gt;flowchart LR
  subgraph Browser["Browser (Local Private Archive)"]
    UI["Día de los Muertos Altar &amp;amp; Ofrenda Shelf"]
    WW["Web Worker: Gemma 3 270M (fp16 ONNX)"]
    UI --&amp;gt;|"1. Summon ghost"| WW
    WW --&amp;gt;|"2. First-person epitaph"| UI
  end

  subgraph ViteServer["Local Vite Middleware (/api/*)"]
    SPEAK["POST /api/speak"]
    SEARCH["GET /api/tiger/search"]
    REST["POST /api/tiger/rest"]
    MINILM["Open-Weight MiniLM-L6-v2 (384-d halfvec)"]
    SEARCH --&amp;gt; MINILM
  end

  subgraph PartnerTech["Partner Technologies"]
    EL["ElevenLabs TTS API (eleven_multilingual_v2)"]
    TIGER[("Tiger Data: TimescaleDB Hypertables + pgvector HNSW + BM25")]
  end

  UI --&amp;gt;|"3. Speak aloud"| SPEAK --&amp;gt; EL
  UI --&amp;gt;|"4. Carve epitaph"| REST --&amp;gt; TIGER
  UI --&amp;gt;|"Hybrid RRF query"| SEARCH --&amp;gt; TIGER&lt;/code&gt;&lt;/pre&gt;



&lt;h3&gt;
  
  
  Step 1: Exporting 1,832 X Bookmarks with &lt;code&gt;@steipete/bird&lt;/code&gt; &amp;amp; the &lt;code&gt;x-bookmarks&lt;/code&gt; Skill
&lt;/h3&gt;

&lt;p&gt;Getting your own bookmarks out of X/Twitter without paying for an enterprise API tier was the first hurdle we solved. We used the open-source &lt;a href="https://github.com/sharbelxyz/x-bookmarks" rel="noopener noreferrer"&gt;&lt;code&gt;x-bookmarks&lt;/code&gt;&lt;/a&gt; agent skill together with &lt;a href="https://www.npmjs.com/package/@steipete/bird" rel="noopener noreferrer"&gt;&lt;code&gt;@steipete/bird&lt;/code&gt;&lt;/a&gt; — a fast GraphQL CLI for X that authenticates using your existing local browser session.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Install the real &lt;code&gt;bird&lt;/code&gt; CLI (watch out for the npm name collision!)&lt;/strong&gt;:
Many READMEs say &lt;code&gt;npm i -g bird-cli&lt;/code&gt;, which actually installs an unrelated scaffolding package on npm. The real X/Twitter CLI is &lt;strong&gt;&lt;code&gt;@steipete/bird&lt;/code&gt;&lt;/strong&gt;:
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;   npm &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;-g&lt;/span&gt; @steipete/bird@0.8.0
   npx &lt;span class="nt"&gt;-y&lt;/span&gt; skills add sharbelxyz/x-bookmarks &lt;span class="nt"&gt;-g&lt;/span&gt; &lt;span class="nt"&gt;-y&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Close your browser &amp;amp; verify your session (&lt;code&gt;bird whoami&lt;/code&gt;)&lt;/strong&gt;:
Chromium-based browsers (Chrome, Brave, Edge, Opera) lock their SQLite &lt;code&gt;Network/Cookies&lt;/code&gt; database while running, and cookie expiration timestamps (&lt;code&gt;expires_utc&lt;/code&gt;) in modern Chromium profiles exceed 53-bit JavaScript numbers (&lt;code&gt;13471969281000000&lt;/code&gt;), which requires &lt;strong&gt;Node 24+&lt;/strong&gt; (&lt;code&gt;node:sqlite&lt;/code&gt; with &lt;code&gt;readBigInts: true&lt;/code&gt;).
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;   &lt;span class="c"&gt;# Chrome / Brave default profile:&lt;/span&gt;
   bird &lt;span class="nt"&gt;--cookie-source&lt;/span&gt; chrome &lt;span class="nt"&gt;--chrome-profile&lt;/span&gt; &lt;span class="s2"&gt;"Default"&lt;/span&gt; &lt;span class="nb"&gt;whoami&lt;/span&gt;

   &lt;span class="c"&gt;# Opera / custom Chromium profile directory:&lt;/span&gt;
   bird &lt;span class="nt"&gt;--cookie-source&lt;/span&gt; chrome &lt;span class="nt"&gt;--chrome-profile-dir&lt;/span&gt; &lt;span class="s2"&gt;"/path/to/Opera Stable/Default"&lt;/span&gt; &lt;span class="nb"&gt;whoami&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Export all bookmarks to JSON (&lt;code&gt;--all --json&lt;/code&gt;)&lt;/strong&gt;:
Once &lt;code&gt;bird whoami&lt;/code&gt; prints your handle, paginate through your entire bookmark history and write it to &lt;code&gt;public/bookmarks.json&lt;/code&gt; (which is gitignored so your personal archive is never committed):
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;   bird &lt;span class="nt"&gt;--plain&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
     &lt;span class="nt"&gt;--cookie-source&lt;/span&gt; chrome &lt;span class="se"&gt;\&lt;/span&gt;
     &lt;span class="nt"&gt;--chrome-profile&lt;/span&gt; &lt;span class="s2"&gt;"Default"&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
     bookmarks &lt;span class="nt"&gt;--all&lt;/span&gt; &lt;span class="nt"&gt;--json&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; public/bookmarks.json
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Alternative (X API v2 OAuth 2.0 PKCE)&lt;/strong&gt;: If you prefer not to use browser cookies, the &lt;code&gt;x-bookmarks&lt;/code&gt; skill also includes &lt;code&gt;scripts/x_api_auth.py&lt;/code&gt; and &lt;code&gt;scripts/fetch_bookmarks_api.py&lt;/code&gt;, which output the exact same &lt;code&gt;{ "tweets": [...] }&lt;/code&gt; JSON schema. You can also upload any export file directly in the app via the &lt;strong&gt;Load another export&lt;/strong&gt; button on the shelf.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  Step 2: Repairing Code Page 437 Mojibake (&lt;code&gt;src/repair.js&lt;/code&gt;)
&lt;/h3&gt;

&lt;p&gt;Our Windows shell redirection initially mangled UTF-8 curly apostrophes and emojis through Code Page 437 (&lt;code&gt;What’s&lt;/code&gt; became &lt;code&gt;WhatΓÇÖs&lt;/code&gt;). Writing a 30-line CP437-to-UTF-8 byte decoder (&lt;code&gt;src/repair.js&lt;/code&gt;) restored all 1,832 bookmarks cleanly before embedding them.&lt;/p&gt;

&lt;h3&gt;
  
  
  Step 3: In-Browser Gemma 3 270M &amp;amp; Fixing &lt;code&gt;GatherBlockQuantized&lt;/code&gt;
&lt;/h3&gt;

&lt;p&gt;We ran &lt;code&gt;onnx-community/gemma-3-270m-it-ONNX&lt;/code&gt; inside a dedicated Web Worker (&lt;code&gt;src/seance.worker.js&lt;/code&gt;) so token generation never blocks the candle animations. When we first tested the 4-bit quantized graph (&lt;code&gt;model_q4.onnx&lt;/code&gt;), ONNX Runtime Web threw:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;Can't create a session. ERROR_CODE: 9, ERROR_MESSAGE: Could not find an implementation for GatherBlockQuantized(1) node with name '/model/embed_tokens/Gather_Quant'&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Because the ONNX graphs are open on Hugging Face, we inspected the operator nodes across &lt;code&gt;model_q4.onnx&lt;/code&gt;, &lt;code&gt;model_quantized.onnx&lt;/code&gt;, and &lt;code&gt;model_fp16.onnx&lt;/code&gt;, verified that &lt;code&gt;fp16&lt;/code&gt; avoids &lt;code&gt;GatherBlockQuantized&lt;/code&gt;, and switched the worker cleanly:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// src/seance.worker.js&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;pipeline&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;env&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;@huggingface/transformers&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="nx"&gt;env&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;allowLocalModels&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;MODEL&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;onnx-community/gemma-3-270m-it-ONNX&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;generator&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nf"&gt;pipeline&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;text-generation&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;MODEL&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="na"&gt;dtype&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;fp16&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="c1"&gt;// Avoids GatherBlockQuantized op unsupported in WASM runtime&lt;/span&gt;
  &lt;span class="na"&gt;progress_callback&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;update&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nb"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;postMessage&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="na"&gt;type&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;progress&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;update&lt;/span&gt; &lt;span class="p"&gt;}),&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Step 4: Tiger Data Hypertables, Continuous Aggregates &amp;amp; Hybrid RRF Search
&lt;/h3&gt;

&lt;p&gt;Using the &lt;strong&gt;Tiger MCP&lt;/strong&gt; gateway connected to our Tiger Cloud service (&lt;code&gt;TimescaleDB 2.30.2&lt;/code&gt; + &lt;code&gt;pgvector 0.8.7&lt;/code&gt; + &lt;code&gt;pg_textsearch 1.5.1&lt;/code&gt;), we created:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;ghost_bookmarks&lt;/code&gt; &amp;amp; &lt;code&gt;seance_rituals&lt;/code&gt; hypertables&lt;/strong&gt; with columnstore compression (&lt;code&gt;tsdb.enable_columnstore = true&lt;/code&gt;) and a real-time continuous aggregate (&lt;code&gt;ghost_bookmarks_yearly&lt;/code&gt; using &lt;code&gt;time_bucket(INTERVAL '1 year', spoken_at)&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;ghost_souls&lt;/code&gt; hybrid search table&lt;/strong&gt; storing 384-dimensional &lt;code&gt;halfvec(384)&lt;/code&gt; embeddings from open-weight &lt;code&gt;Xenova/all-MiniLM-L6-v2&lt;/code&gt; indexed with HNSW (&lt;code&gt;halfvec_cosine_ops&lt;/code&gt;) alongside a &lt;code&gt;pg_textsearch&lt;/code&gt; BM25 index (&lt;code&gt;USING bm25 (content) WITH (text_config = 'english')&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Single-query Reciprocal Rank Fusion (&lt;code&gt;rrf_search_ghosts&lt;/code&gt;)&lt;/strong&gt;:
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight sql"&gt;&lt;code&gt;&lt;span class="k"&gt;CREATE&lt;/span&gt; &lt;span class="k"&gt;OR&lt;/span&gt; &lt;span class="k"&gt;REPLACE&lt;/span&gt; &lt;span class="k"&gt;FUNCTION&lt;/span&gt; &lt;span class="n"&gt;rrf_search_ghosts&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
  &lt;span class="n"&gt;query_text&lt;/span&gt; &lt;span class="nb"&gt;TEXT&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="n"&gt;query_vec&lt;/span&gt; &lt;span class="n"&gt;halfvec&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;384&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
  &lt;span class="n"&gt;match_limit&lt;/span&gt; &lt;span class="nb"&gt;INT&lt;/span&gt; &lt;span class="k"&gt;DEFAULT&lt;/span&gt; &lt;span class="mi"&gt;36&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="k"&gt;RETURNS&lt;/span&gt; &lt;span class="k"&gt;TABLE&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;
  &lt;span class="n"&gt;tweet_id&lt;/span&gt; &lt;span class="nb"&gt;TEXT&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="n"&gt;rrf_score&lt;/span&gt; &lt;span class="nb"&gt;DOUBLE&lt;/span&gt; &lt;span class="nb"&gt;PRECISION&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="n"&gt;semantic_rank&lt;/span&gt; &lt;span class="nb"&gt;BIGINT&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="n"&gt;bm25_rank&lt;/span&gt; &lt;span class="nb"&gt;BIGINT&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="k"&gt;LANGUAGE&lt;/span&gt; &lt;span class="k"&gt;sql&lt;/span&gt; &lt;span class="k"&gt;STABLE&lt;/span&gt; &lt;span class="k"&gt;AS&lt;/span&gt; &lt;span class="err"&gt;$$&lt;/span&gt;
  &lt;span class="k"&gt;WITH&lt;/span&gt; &lt;span class="n"&gt;semantic&lt;/span&gt; &lt;span class="k"&gt;AS&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="k"&gt;SELECT&lt;/span&gt; &lt;span class="k"&gt;g&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;tweet_id&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;ROW_NUMBER&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="n"&gt;OVER&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;ORDER&lt;/span&gt; &lt;span class="k"&gt;BY&lt;/span&gt; &lt;span class="k"&gt;g&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;embedding&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;=&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;query_vec&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;AS&lt;/span&gt; &lt;span class="n"&gt;s_rank&lt;/span&gt;
    &lt;span class="k"&gt;FROM&lt;/span&gt; &lt;span class="n"&gt;ghost_souls&lt;/span&gt; &lt;span class="k"&gt;g&lt;/span&gt;
    &lt;span class="k"&gt;WHERE&lt;/span&gt; &lt;span class="k"&gt;g&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;embedding&lt;/span&gt; &lt;span class="k"&gt;IS&lt;/span&gt; &lt;span class="k"&gt;NOT&lt;/span&gt; &lt;span class="k"&gt;NULL&lt;/span&gt;
    &lt;span class="k"&gt;ORDER&lt;/span&gt; &lt;span class="k"&gt;BY&lt;/span&gt; &lt;span class="k"&gt;g&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;embedding&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;=&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;query_vec&lt;/span&gt;
    &lt;span class="k"&gt;LIMIT&lt;/span&gt; &lt;span class="mi"&gt;60&lt;/span&gt;
  &lt;span class="p"&gt;),&lt;/span&gt;
  &lt;span class="n"&gt;keyword&lt;/span&gt; &lt;span class="k"&gt;AS&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="k"&gt;SELECT&lt;/span&gt; &lt;span class="k"&gt;g&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;tweet_id&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;ROW_NUMBER&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="n"&gt;OVER&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;ORDER&lt;/span&gt; &lt;span class="k"&gt;BY&lt;/span&gt; &lt;span class="k"&gt;g&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;content&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;@&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;to_bm25query&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;query_text&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;'ghost_souls_bm25_idx'&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt; &lt;span class="k"&gt;AS&lt;/span&gt; &lt;span class="n"&gt;k_rank&lt;/span&gt;
    &lt;span class="k"&gt;FROM&lt;/span&gt; &lt;span class="n"&gt;ghost_souls&lt;/span&gt; &lt;span class="k"&gt;g&lt;/span&gt;
    &lt;span class="k"&gt;WHERE&lt;/span&gt; &lt;span class="n"&gt;query_text&lt;/span&gt; &lt;span class="k"&gt;IS&lt;/span&gt; &lt;span class="k"&gt;NOT&lt;/span&gt; &lt;span class="k"&gt;NULL&lt;/span&gt; &lt;span class="k"&gt;AND&lt;/span&gt; &lt;span class="n"&gt;btrim&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;query_text&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&amp;gt;&lt;/span&gt; &lt;span class="s1"&gt;''&lt;/span&gt;
    &lt;span class="k"&gt;ORDER&lt;/span&gt; &lt;span class="k"&gt;BY&lt;/span&gt; &lt;span class="k"&gt;g&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;content&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;@&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;to_bm25query&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;query_text&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;'ghost_souls_bm25_idx'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="k"&gt;LIMIT&lt;/span&gt; &lt;span class="mi"&gt;60&lt;/span&gt;
  &lt;span class="p"&gt;)&lt;/span&gt;
  &lt;span class="k"&gt;SELECT&lt;/span&gt;
    &lt;span class="n"&gt;COALESCE&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;s&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;tweet_id&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;k&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;tweet_id&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;AS&lt;/span&gt; &lt;span class="n"&gt;tweet_id&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;COALESCE&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;60&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="n"&gt;s&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;s_rank&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="n"&gt;COALESCE&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;60&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="n"&gt;k&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;k_rank&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;))::&lt;/span&gt;&lt;span class="nb"&gt;DOUBLE&lt;/span&gt; &lt;span class="nb"&gt;PRECISION&lt;/span&gt; &lt;span class="k"&gt;AS&lt;/span&gt; &lt;span class="n"&gt;rrf_score&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;s&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;s_rank&lt;/span&gt; &lt;span class="k"&gt;AS&lt;/span&gt; &lt;span class="n"&gt;semantic_rank&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;k&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;k_rank&lt;/span&gt; &lt;span class="k"&gt;AS&lt;/span&gt; &lt;span class="n"&gt;bm25_rank&lt;/span&gt;
  &lt;span class="k"&gt;FROM&lt;/span&gt; &lt;span class="n"&gt;semantic&lt;/span&gt; &lt;span class="n"&gt;s&lt;/span&gt;
  &lt;span class="k"&gt;FULL&lt;/span&gt; &lt;span class="k"&gt;OUTER&lt;/span&gt; &lt;span class="k"&gt;JOIN&lt;/span&gt; &lt;span class="n"&gt;keyword&lt;/span&gt; &lt;span class="n"&gt;k&lt;/span&gt; &lt;span class="k"&gt;ON&lt;/span&gt; &lt;span class="n"&gt;s&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;tweet_id&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;k&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;tweet_id&lt;/span&gt;
  &lt;span class="k"&gt;ORDER&lt;/span&gt; &lt;span class="k"&gt;BY&lt;/span&gt; &lt;span class="n"&gt;rrf_score&lt;/span&gt; &lt;span class="k"&gt;DESC&lt;/span&gt;
  &lt;span class="k"&gt;LIMIT&lt;/span&gt; &lt;span class="n"&gt;match_limit&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="err"&gt;$$&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






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

&lt;p&gt;Our social-media bookmarks are an intimate map of our curiosity — years of late-night rabbit holes, half-formed side projects, and personal tastes.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Your personal archive stays on your machine&lt;/strong&gt;: By running &lt;strong&gt;Gemma 3 270M&lt;/strong&gt; (&lt;code&gt;onnx-community/gemma-3-270m-it-ONNX&lt;/code&gt;) directly inside a browser Web Worker and embedding queries locally with open-weight &lt;strong&gt;MiniLM-L6-v2&lt;/strong&gt; (&lt;code&gt;Xenova/all-MiniLM-L6-v2&lt;/code&gt;), you don't have to upload your entire private bookmark export to a proprietary LLM API just to reflect on what you saved.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Works after platforms and APIs change&lt;/strong&gt;: Twitter/X has repeatedly locked down its API pricing and endpoints. Paired with open-source export tooling (&lt;code&gt;@steipete/bird&lt;/code&gt;), open PostgreSQL extensions (&lt;code&gt;TimescaleDB&lt;/code&gt;, &lt;code&gt;pgvector&lt;/code&gt;, &lt;code&gt;pg_textsearch&lt;/code&gt;), and open-weight ONNX models cached in the browser, your ofrenda keeps working even when the lights (or the internet) go out.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Inspectable &amp;amp; repairable when things break&lt;/strong&gt;: When the 4-bit Gemma graph failed on &lt;code&gt;GatherBlockQuantized&lt;/code&gt; in WASM, open weights and open ONNX graphs meant we could inspect the exact operator nodes and switch to &lt;code&gt;fp16&lt;/code&gt; in minutes instead of waiting on a black-box vendor ticket.&lt;/li&gt;
&lt;/ol&gt;




&lt;h2&gt;
  
  
  My Agent Session &amp;amp; How We Used DevRelay
&lt;/h2&gt;

&lt;p&gt;I built &lt;strong&gt;Ghosts of the Feed&lt;/strong&gt; in Cursor with an AI coding agent, using &lt;strong&gt;DevRelay&lt;/strong&gt; (&lt;code&gt;devrelay-challenges&lt;/code&gt;, &lt;code&gt;devrelay-knowledge&lt;/code&gt;, &lt;code&gt;devrelay-sponsor-skills&lt;/code&gt;, and &lt;code&gt;devrelay-publishing&lt;/code&gt;) alongside the &lt;strong&gt;Tiger MCP&lt;/strong&gt; gateway throughout the entire build:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Discovering the Challenge &amp;amp; Rubric via DevRelay&lt;/strong&gt;: We used the &lt;code&gt;devrelay-challenges&lt;/code&gt; skill and the DEV Events API (&lt;code&gt;full_details&lt;/code&gt; on Event &lt;code&gt;#82&lt;/code&gt;) together with the authoritative &lt;strong&gt;DevRelay Knowledge Base&lt;/strong&gt; (&lt;code&gt;https://devrelay.com/knowledge/dev-challenges&lt;/code&gt;, &lt;code&gt;/knowledge/hacktoberfest&lt;/code&gt;, and &lt;code&gt;/knowledge/dev-guidelines&lt;/code&gt;) to inspect the exact &lt;strong&gt;Week 4: Ghost in the Machine&lt;/strong&gt; theme, submission rules, required tags (&lt;code&gt;#hf26challenge&lt;/code&gt;, &lt;code&gt;#devchallenge&lt;/code&gt;), and partner prize tracks before writing a single line of code.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Exporting the X Archive Safely&lt;/strong&gt;: The agent installed the &lt;code&gt;x-bookmarks&lt;/code&gt; skill and &lt;code&gt;@steipete/bird&lt;/code&gt;, diagnosed the Opera SQLite lock and Node 24 &lt;code&gt;readBigInts&lt;/code&gt; requirement for Chromium cookie timestamps, and exported all 1,832 bookmarks locally.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Provisioning Tiger Data with Official Agent Skills&lt;/strong&gt;: Using Tiger MCP's &lt;code&gt;view_skill&lt;/code&gt; (&lt;code&gt;setup-timescaledb-hypertables&lt;/code&gt;, &lt;code&gt;pgvector-semantic-search&lt;/code&gt;, and &lt;code&gt;postgres-hybrid-text-search&lt;/code&gt;), the agent provisioned the &lt;code&gt;ghost_bookmarks&lt;/code&gt; and &lt;code&gt;seance_rituals&lt;/code&gt; hypertables, the &lt;code&gt;ghost_bookmarks_yearly&lt;/code&gt; continuous aggregate, and the &lt;code&gt;halfvec(384)&lt;/code&gt; HNSW + BM25 Reciprocal Rank Fusion function directly on our Tiger Cloud service.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Iterating on the Día de los Muertos Altar UI&lt;/strong&gt;: Using live browser snapshots, we evolved the UI from a simple grid into a candlelit retablo shrine with velvet votive cards, flickering flames, and real-time Tiger Data telemetry, and structured this submission post using &lt;code&gt;devrelay-publishing&lt;/code&gt;.&lt;/li&gt;
&lt;/ol&gt;




&lt;h2&gt;
  
  
  The Spirit of It
&lt;/h2&gt;

&lt;p&gt;Día de los Muertos isn't about ghosts that scare you — it's about setting out a candle and remembering the voices and sparks that shaped you. Every bookmark in that folder was a moment where something made you stop scrolling and think, &lt;em&gt;"I want to build that someday."&lt;/em&gt; Putting them on an ofrenda lets them ask for one more chance.&lt;/p&gt;




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

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Best Use of Gemma&lt;/strong&gt;: Runs Google's open-weight &lt;code&gt;gemma-3-270m-it&lt;/code&gt; (&lt;code&gt;onnx-community/gemma-3-270m-it-ONNX&lt;/code&gt;) 100% in-browser inside a Web Worker (&lt;code&gt;fp16&lt;/code&gt; ONNX) to channel each forgotten bookmark in the first person.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Best Use of ElevenLabs&lt;/strong&gt;: Gives every summoned bookmark a spoken neural voice via &lt;code&gt;eleven_multilingual_v2&lt;/code&gt; through a secure local server route (&lt;code&gt;/api/speak&lt;/code&gt;), synchronized with the altar's flickering candle.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Best Use of Tiger Data&lt;/strong&gt;: Combines &lt;code&gt;TimescaleDB&lt;/code&gt; hypertables (&lt;code&gt;ghost_bookmarks&lt;/code&gt;, &lt;code&gt;seance_rituals&lt;/code&gt;), a real-time &lt;code&gt;time_bucket&lt;/code&gt; continuous aggregate (&lt;code&gt;ghost_bookmarks_yearly&lt;/code&gt;), and in-database Reciprocal Rank Fusion across &lt;code&gt;pgvector&lt;/code&gt; (&lt;code&gt;halfvec(384)&lt;/code&gt; HNSW cosine) and &lt;code&gt;pg_textsearch&lt;/code&gt; (BM25 &lt;code&gt;&amp;lt;@&amp;gt;&lt;/code&gt;).&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>devchallenge</category>
      <category>hf26challenge</category>
      <category>opensource</category>
      <category>ai</category>
    </item>
    <item>
      <title>Hacktoberfest 2025</title>
      <dc:creator>Eduard Constantin</dc:creator>
      <pubDate>Thu, 09 Oct 2025 17:39:15 +0000</pubDate>
      <link>https://dev.to/_eduard26/hacktoberfest-2025-5022</link>
      <guid>https://dev.to/_eduard26/hacktoberfest-2025-5022</guid>
      <description>&lt;p&gt;Another year, another Hacktoberfest event, and here I am again, tossing my repos into the wild like candy at a parade. Except instead of sugar highs, you’ll get merge conflicts, questionable variable names, and the eternal glory of open source contribution.&lt;/p&gt;

&lt;p&gt;🪙 &lt;a href="https://github.com/eduardconstantin/Crypto-Rankings" rel="noopener noreferrer"&gt;Crypto-Rankings&lt;/a&gt;&lt;br&gt;
React app that shows the top three cryptocurrencies. Because who doesn’t want to know which digital coin is mooning while your wallet is crying? Built with React, Chart.js, and a sprinkle of bootstrap magic.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Contribution idea: Add more charts, improve UI, or make it look less like I coded it at 2 AM after too much coffee.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;💸 &lt;a href="https://github.com/eduardconstantin/Top-three-crypto" rel="noopener noreferrer"&gt;Top-three-crypto&lt;/a&gt;&lt;br&gt;
Yes, it’s another crypto project. No, I don’t have a problem. This one also shows the top three cryptos, but with Docker support and some extra flair.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Contribution idea: Help me make it cooler than its sibling. Or just add a button that says “Buy Dogecoin” for the memes.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;🧘 &lt;a href="https://github.com/eduardconstantin/Regenerator" rel="noopener noreferrer"&gt;Regenerator&lt;/a&gt;&lt;br&gt;
A website to regenerate your body and soul. Think of it as a digital spa day, minus the cucumber water.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Contribution idea: Add new relaxation techniques, improve the UI, or sneak in an Easter egg that Rickrolls people. (I won’t stop you.)&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;📖 &lt;a href="https://github.com/eduardconstantin/storybook-gpt" rel="noopener noreferrer"&gt;storybook-gpt&lt;/a&gt;&lt;br&gt;
Turns React components into Storybook stories using AI. Basically, it’s like having a robot intern who doesn’t complain about unpaid overtime.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Contribution idea: Improve prompts, add new features, or teach it to generate stories that don’t look like they were written by a caffeinated squirrel.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;☁️ &lt;a href="https://github.com/eduardconstantin/azure-cloud-exams" rel="noopener noreferrer"&gt;azure-cloud-exams&lt;/a&gt;&lt;br&gt;
A quiz app for Azure certifications. Because nothing says “fun” like studying cloud services until your brain feels like a VM running out of memory.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Contribution idea: Add more questions, improve the UI, or create a “panic mode” for when the exam is tomorrow and you’ve studied nothing.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;🧞 &lt;a href="https://github.com/eduardconstantin/storybook-genie" rel="noopener noreferrer"&gt;storybook-genie&lt;/a&gt;&lt;br&gt;
A CLI tool that generates Storybook stories from React components. Rub the lamp, type a command, and boom—storybook magic.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Contribution idea: Add new templates, improve CLI UX, or make it grant three wishes. (Okay, maybe just the first two.)&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why Should You Contribute?&lt;/strong&gt;&lt;br&gt;
You get Hacktoberfest credit and badges.&lt;br&gt;
You get to say “I fixed this repo” in your portfolio.&lt;br&gt;
You get my eternal gratitude (and maybe a sarcastic comment in your PR).&lt;br&gt;
So fork it, clone it, break it, fix it, PR it.&lt;/p&gt;

</description>
      <category>hacktoberfest</category>
      <category>webdev</category>
      <category>github</category>
      <category>programming</category>
    </item>
    <item>
      <title>🎉 Hacktoberfest 2024</title>
      <dc:creator>Eduard Constantin</dc:creator>
      <pubDate>Wed, 02 Oct 2024 16:07:39 +0000</pubDate>
      <link>https://dev.to/_eduard26/hacktoberfest-2024-4pdb</link>
      <guid>https://dev.to/_eduard26/hacktoberfest-2024-4pdb</guid>
      <description>&lt;p&gt;Hey there, keyboard warriors! Ready to dive into some epic GitHub repos this Hacktoberfest? Grab your favorite snacks and let’s explore some interesting projects that are waiting for your contributions.&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%2F6ktrc9wxzw4q848wqlug.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%2F6ktrc9wxzw4q848wqlug.png" alt="Storybook genie" width="800" height="409"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Storybook Genie&lt;/strong&gt; 🧞‍♂️&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Ever wished you had a magical assistant to help you create your Storybook stories? Well, wish granted! Storybook Genie is a command line interface tool that can convert files containing React components into Storybook stories. Whether you’re a newbie or a seasoned pro, this repo has something for everyone. So, rub that lamp and start coding!&lt;br&gt;
&lt;a href="https://github.com/eduardconstantin/storybook-genie" rel="noopener noreferrer"&gt;https://github.com/eduardconstantin/storybook-genie&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%2Fywmaumml6uqv3mcd78td.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%2Fywmaumml6uqv3mcd78td.png" alt="Ace" width="799" height="472"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Azure Cloud Exams (ACE)&lt;/strong&gt; ☁️&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Feeling like a cloud ninja? Ready to slice through those Azure certifications like a pro? Azure Cloud Exams is your dojo. Built with Next.js, TypeScript, CosmosDB, GraphQL, and TailwindCSS, this web application quizzes you on Azure cloud exams. The questions are coming from Ditectrev repos.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/eduardconstantin/azure-cloud-exams" rel="noopener noreferrer"&gt;https://github.com/eduardconstantin/azure-cloud-exams&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%2Ftut6ywjg3ogxnl7hsa6k.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%2Ftut6ywjg3ogxnl7hsa6k.png" alt="Storybook gpt" width="800" height="513"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Storybook GPT&lt;/strong&gt; 🤖&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Imagine combining the power of Storybook with the intelligence of GPT. Sounds like a match made in tech heaven, right? Storybook GPT is a web application that converts React components into Storybook stories using the OpenAI API. Built with NextJS 13, TypeScript, and TailwindCSS. With Storybook GPT, you can easily create and share interactive UI components for your projects.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/eduardconstantin/storybook-gpt" rel="noopener noreferrer"&gt;https://github.com/eduardconstantin/storybook-gpt&lt;/a&gt;&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;Why Contribute?&lt;/strong&gt;&lt;br&gt;
Because it’s Hacktoberfest, baby! 🌟 It’s the perfect time to give back to the open-source community, learn new skills, and maybe even earn some cool swag. Plus, you’ll get to brag about your contributions to your friends, family, and that one guy who always thinks he’s better than you.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How to Get Started&lt;/strong&gt;&lt;br&gt;
Register for Hacktoberfest &lt;a href="https://hacktoberfest.com" rel="noopener noreferrer"&gt;here&lt;/a&gt;.&lt;br&gt;
Fork the repos and start making those sweet, sweet pull requests.&lt;br&gt;
Celebrate your contributions with your favorite treat (or two).&lt;/p&gt;

&lt;p&gt;So, what are you waiting for? Get out there and make some code magic happen! And remember, with great code comes great responsibility… or something like that. 🕶️&lt;/p&gt;

</description>
      <category>hacktoberfest</category>
      <category>webdev</category>
      <category>javascript</category>
      <category>opensource</category>
    </item>
    <item>
      <title>Glam Up My Markup: Earth Day Celebration Dashboard</title>
      <dc:creator>Eduard Constantin</dc:creator>
      <pubDate>Thu, 25 Apr 2024 19:55:00 +0000</pubDate>
      <link>https://dev.to/_eduard26/glam-up-my-markup-earth-day-celebration-landing-page-750</link>
      <guid>https://dev.to/_eduard26/glam-up-my-markup-earth-day-celebration-landing-page-750</guid>
      <description>&lt;p&gt;&lt;em&gt;This is a submission for &lt;a href="https://dev.to/devteam/join-us-for-the-next-frontend-challenge-earth-day-edition-52e4"&gt;Frontend Challenge v24.04.17&lt;/a&gt;, Glam Up My Markup: Earth Day Celebration Landing Page&lt;/em&gt;&lt;/p&gt;

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

&lt;p&gt;For this challenge I’ve crafted a dashboard that’s as vibrant and dynamic as Earth Day itself.🌿&lt;br&gt;
Imagine a UI framed with the precision of a Bento box, where each element sits in harmony with the others. The cards are the real showstoppers here, with a frosted glass aesthetic that’s as cool as the other side of the pillow. They’re like little windows fogged up by Mother Nature’s breath.&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%2Fgx3qkz1u3si6yedn3zuj.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%2Fgx3qkz1u3si6yedn3zuj.png" alt="Dashboard" width="800" height="375"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  Demo
&lt;/h2&gt;

&lt;p&gt;&lt;iframe height="600" src="https://codepen.io/ieduard/embed/WNWaYpZ?height=600&amp;amp;default-tab=result&amp;amp;embed-version=2"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

&lt;p&gt;I recommend watching the demo &lt;a href="https://codepen.io/ieduard/full/WNWaYpZ" rel="noopener noreferrer"&gt;here.&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Journey
&lt;/h2&gt;

&lt;p&gt;So, how did this dashboard come to life? Well, it all started with a memory—a blast from the past. I was about to settle for a one page layout, you know, the usual stuff. But then, like a lightning bolt of inspiration, I remembered my old gig. A few years ago, I was the dashboard whisperer, crafting production dashboards with the precision of a watchmaker. And guess what? I used the Bento grid structure build them.&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%2F0arky6rwx3733wfl4jbv.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%2F0arky6rwx3733wfl4jbv.png" alt="Dashboard 2" width="799" height="375"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;That’s right, the Bento grid—a layout so organized, it could make Marie Kondo shed a tear of joy. With the structure in place, I knew I had to make it look unique. None of that cookie-cutter dashboard business. (Remember my &lt;a href="https://dribbble.com/shots/17656116-Xbox-Dashboard-Animation" rel="noopener noreferrer"&gt;Xbox dashboard on Dribbble&lt;/a&gt;? Yeah, nothing like that.) &lt;/p&gt;

&lt;p&gt;While looking for inspiration I stumbled upon an &lt;a href="https://www.vecteezy.com/photo/10377369-beautiful-view-on-planet-earth-from-space-at-night-with-city-light-fantasy-and-futuristic-digital-art-style-background-wallpaper" rel="noopener noreferrer"&gt;AI-generated image&lt;/a&gt; of Earth from space. Fate? Destiny? Call it what you will, but that image became the backdrop for my cards. Each card got a blurred background, but I didn’t settle for just any blur. Oh no, I went full mad scientist. Three masks — dotted patterns, corner cuts and iconic symbols — came together to form a frosted background that’s truly unique.&lt;/p&gt;

&lt;p&gt;And the background? I couldn't decide for just one pretty picture, so I added more. Crafted with AI and a sprinkle of internet stardust, it moves in mysterious ways, just like the tides of the ocean — except it’s your mouse calling the shots.&lt;/p&gt;

&lt;p&gt;So there you have it. A dashboard that’s not just a feast for the eyes but a tribute to our beautiful planet. Dive in, explore and &lt;strong&gt;let’s make every day Earth Day&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;MIT License&lt;/p&gt;

</description>
      <category>devchallenge</category>
      <category>frontendchallenge</category>
      <category>css</category>
      <category>javascript</category>
    </item>
    <item>
      <title>Certifiably Thrifty: How I Snagged GitHub’s Foundation Certification for Free!</title>
      <dc:creator>Eduard Constantin</dc:creator>
      <pubDate>Mon, 22 Apr 2024 18:49:52 +0000</pubDate>
      <link>https://dev.to/_eduard26/certifiably-thrifty-how-i-snagged-githubs-foundation-certification-for-free-5217</link>
      <guid>https://dev.to/_eduard26/certifiably-thrifty-how-i-snagged-githubs-foundation-certification-for-free-5217</guid>
      <description>&lt;p&gt;Alright, buckle up, 'cause today I’m sharing a secret so exciting, it'll make your fingers dance across the keyboard. &lt;br&gt;
So, I assume everyone knows GitHub, right? That place where coders do… code thingies? As you might be aware &lt;em&gt;(or not)&lt;/em&gt;, they now offer four juicy certifications:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://learn.microsoft.com/en-us/collections/o1njfe825p602p" rel="noopener noreferrer"&gt;GitHub Foundations&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://learn.microsoft.com/en-us/collections/n5p4a5z7keznp5" rel="noopener noreferrer"&gt;GitHub Actions&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://learn.microsoft.com/en-us/collections/mom7u1gzjdxw03" rel="noopener noreferrer"&gt;GitHub Administration&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://learn.microsoft.com/en-us/collections/rqymc6yw8q5rey" rel="noopener noreferrer"&gt;Advanced Security&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Earlier this month, yours truly decided to level up and snag the Foundation Certification because GitHub was throwing a wicked 50% discount.&lt;/p&gt;

&lt;p&gt;After I finished the registration process for the certification, I ended up at the checkout page where I stumbled upon a pre-filled input field with a coupon code chillin' inside like it owned the place. Naturally, I'm thinking: "Sweet! This must be the golden key to that sweet 50% discount". So, I hit apply and 💥&lt;strong&gt;BOOM!&lt;/strong&gt;💥 The checkout price nosedives to &lt;strong&gt;ZERO&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;I know, I know, it sounds too good to be true, but it worked for me! Snagged that cert without droppin' a dime.&lt;/p&gt;

&lt;p&gt;Now, here's the kicker — I'm not sure if this is a limited-time glitch or a slick Easter egg from the generous crew over at GitHub. Either way, I just wanted to spill the beans while the gettin's good. &lt;/p&gt;

&lt;p&gt;If you've been eyeing this certification, now is your chance to grab it without emptying your pockets, just head over to the &lt;a href="https://resources.github.com/learn/certifications/" rel="noopener noreferrer"&gt;GitHub Certification page&lt;/a&gt;, complete the registration process and at the checkout page keep those peepers peeled for that coupon code.&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%2Fqm4vs8gyohd5lsgxf604.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%2Fqm4vs8gyohd5lsgxf604.png" alt="registration checkout" width="800" height="350"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>github</category>
      <category>learning</category>
      <category>certification</category>
      <category>webdev</category>
    </item>
    <item>
      <title>Glam Up My Markup: Camp Activities</title>
      <dc:creator>Eduard Constantin</dc:creator>
      <pubDate>Sun, 31 Mar 2024 15:20:15 +0000</pubDate>
      <link>https://dev.to/_eduard26/glam-up-my-markup-camp-activities-3b4d</link>
      <guid>https://dev.to/_eduard26/glam-up-my-markup-camp-activities-3b4d</guid>
      <description>&lt;p&gt;&lt;em&gt;This is a submission for DEV Challenge v24.03.20, Glam Up My Markup: Camp Activities&lt;/em&gt;&lt;/p&gt;

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

&lt;p&gt;I built a web form that has a Camp Activities theme, aiming to enhance the markup and styling for a visually appealing experience. Here are the key features:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Background Image:&lt;/strong&gt; I incorporated a custom background image that seamlessly blends with the camp theme. The AI-generated background adds an adventurous vibe to the page, setting the tone for camp-related content.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Custom Dropdown:&lt;/strong&gt; To improve user interaction, I designed a custom dropdown menu. The dropdown enhances both functionality and aesthetics.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Font Style:&lt;/strong&gt; I found that Bubblegum Sans perfectly aligns with the camp atmosphere. Its bouncy, cheerful style adds a sense of adventure and excitement to the form content.&lt;/li&gt;
&lt;/ul&gt;

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

&lt;p&gt;&lt;iframe height="600" src="https://codepen.io/ieduard/embed/KKYyPoN?height=600&amp;amp;default-tab=result&amp;amp;embed-version=2"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

&lt;h2&gt;
  
  
  Journey
&lt;/h2&gt;

&lt;p&gt;During this challenge, I delved into CSS and JS techniques and learned how to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Blend Backgrounds:&lt;/strong&gt; The background image was carefully chosen to evoke the spirit of camping.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Style Custom Dropdowns:&lt;/strong&gt; Customizing the dropdown menu involved tweaking colors, fonts and animations using both JS and CSS.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Validate Form Inputs:&lt;/strong&gt; I also used JS to validate user's inputs, ensuring accurate and complete form submissions.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;MIT License&lt;/p&gt;

</description>
      <category>frontendchallenge</category>
      <category>devchallenge</category>
      <category>css</category>
      <category>javascript</category>
    </item>
    <item>
      <title>Azure Cloud Exams: A Community-Driven Open Source Project</title>
      <dc:creator>Eduard Constantin</dc:creator>
      <pubDate>Wed, 28 Feb 2024 17:08:32 +0000</pubDate>
      <link>https://dev.to/_eduard26/azure-cloud-exams-26f0</link>
      <guid>https://dev.to/_eduard26/azure-cloud-exams-26f0</guid>
      <description>&lt;p&gt;I'm excited to announce the launch of my new web application designed to help you ace your Azure exams! &lt;br&gt;
This comprehensive platform offers a wide range of interactive quizzes covering various Azure certifications, making it the perfect tool to test your knowledge and identify areas for improvement.&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%2Fy4ud3t1x6k5pc580s5xy.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%2Fy4ud3t1x6k5pc580s5xy.png" alt="home page" width="800" height="370"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Sharpen Your Azure Expertise
&lt;/h3&gt;

&lt;p&gt;Whether you're a seasoned Azure professional or just starting your cloud journey, this application provides a valuable resource to solidify your understanding of Azure services and functionalities.&lt;/p&gt;

&lt;p&gt;Key Features:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Multiple-choice questions: Test your understanding of core concepts and essential details.&lt;/li&gt;
&lt;li&gt;Immediate feedback: Gain insights into your performance and identify areas requiring further study.&lt;/li&gt;
&lt;li&gt;Track your progress: Monitor your learning journey and measure your improvement over time.&lt;/li&gt;
&lt;li&gt;User-friendly interface: Navigate seamlessly through the quizzes and access valuable resources effortlessly.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Test your Azure skills here: &lt;a href="https://nice-sky-0509a9903.2.azurestaticapps.net" rel="noopener noreferrer"&gt;https://nice-sky-0509a9903.2.azurestaticapps.net&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%2Fozqlz0z88sa0gpd1b69a.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%2Fozqlz0z88sa0gpd1b69a.png" alt="exam mode" width="800" height="397"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Open Source Collaboration
&lt;/h3&gt;

&lt;p&gt;This project is open-source and I welcome contributions from the community! &lt;br&gt;
If you're passionate about Azure and want to help expand the project or fix bugs, feel free to fork the &lt;a href="https://github.com/eduardconstantin/azure-cloud-exams" rel="noopener noreferrer"&gt;repository&lt;/a&gt; and submit your pull requests.&lt;/p&gt;

&lt;p&gt;Let's make this platform an exceptional tool for the Azure community!&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>azure</category>
      <category>opensource</category>
      <category>learning</category>
    </item>
    <item>
      <title>My Hacktoberfest 2023 Experience</title>
      <dc:creator>Eduard Constantin</dc:creator>
      <pubDate>Sun, 15 Oct 2023 08:57:40 +0000</pubDate>
      <link>https://dev.to/_eduard26/my-hacktoberfest-2023-experience-47b0</link>
      <guid>https://dev.to/_eduard26/my-hacktoberfest-2023-experience-47b0</guid>
      <description>&lt;h3&gt;
  
  
  Intro
&lt;/h3&gt;

&lt;p&gt;I’m excited to share with you my experience of participating in this year's Hacktoberfest. In this post, I will talk about the highs and lows, the growth, and the benefits of contributing to open source projects during this month.&lt;/p&gt;

&lt;h3&gt;
  
  
  Highs and Lows
&lt;/h3&gt;

&lt;p&gt;One of the biggest highs for me was discovering and contributing to two amazing repositories: &lt;a href="https://github.com/illacloud/illa-builder" rel="noopener noreferrer"&gt;illa-builder&lt;/a&gt; and &lt;a href="https://github.com/0l1v3rr/trello-clone" rel="noopener noreferrer"&gt;trello-clone&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;ILLA is a robust open source low-code platform for developers to build internal tools. By using ILLA's library of Components and Actions, developers can save massive amounts of time on building tools. You can use natural language to define your agent’s logic, personality, and behavior, and then deploy it as a web app, a chatbot, or a voice assistant. I was fascinated by this idea and decided to try it out for myself. I created a personalized recipe generator based on user’s culinary preferences using illa ai builder.(&lt;a href="https://github.com/illacloud/illa-builder/pull/2531" rel="noopener noreferrer"&gt;Github PR&lt;/a&gt;) I also created an app on this platform, a random rgba color generator.(&lt;a href="https://github.com/illacloud/illa-builder/pull/2838" rel="noopener noreferrer"&gt;Github PR&lt;/a&gt;) It was a fun and rewarding experience to see my AI agent come to life and suggest delicious dishes for me.&lt;/p&gt;

&lt;p&gt;trello-clone is a web app that replicates the functionality of Trello, a popular project management tool. It uses Next.js 13, React, Tailwind CSS and Prisma. I learned a lot about these technologies while working on this project. I helped fix some bugs such as adding adding focus on inputs and fixing the WYSIWYG editor text overflow.(&lt;a href="https://github.com/0l1v3rr/trello-clone/pull/28" rel="noopener noreferrer"&gt;Github PR1&lt;/a&gt;, &lt;a href="https://github.com/0l1v3rr/trello-clone/pull/39" rel="noopener noreferrer"&gt;Github PR2&lt;/a&gt;)&lt;/p&gt;

&lt;p&gt;Of course, not everything was smooth sailing. I also faced some challenges and difficulties during Hacktoberfest 2023. Some of them were:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Finding suitable projects to contribute to. There are so many open source projects out there, but not all of them are beginner-friendly or well-documented. I had to do some research and filtering to find the ones that matched my interests and skills.&lt;/li&gt;
&lt;li&gt;Understanding the codebase and the workflow of the projects. Each project has its own structure, style, and conventions. It took me some time to get familiar with them and follow the guidelines. I also had to learn how to use Git and GitHub effectively to fork, clone, branch, commit, push, pull, and merge.&lt;/li&gt;
&lt;li&gt;Dealing with errors and bugs. Sometimes, things didn’t work as expected or broke down completely. I had to debug and test my code thoroughly before submitting a pull request. I also had to deal with merge conflicts and code reviews.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;However, I didn’t give up or get discouraged by these problems. Instead, I used them as opportunities to learn and grow. I adapted by:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Asking for help from the maintainers or other contributors when I was stuck or confused. They were very friendly and supportive and gave me useful feedback and guidance.&lt;/li&gt;
&lt;li&gt;Reading the documentation, tutorials, articles, blogs, videos, podcasts, etc. related to the projects or technologies I was working on. They helped me understand the concepts and best practices better.&lt;/li&gt;
&lt;li&gt;Practicing and experimenting with different solutions until I found the one that worked best for me.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Growth
&lt;/h3&gt;

&lt;p&gt;I can confidently say that my skillset improved significantly during Hacktoberfest 2023. After working on these projects, I learned:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;How to use illa-builder to create AI agents and apps without coding&lt;/li&gt;
&lt;li&gt;How to use Next.js 13 to create fast and scalable web apps&lt;/li&gt;
&lt;li&gt;How to use Prisma to store and manage data&lt;/li&gt;
&lt;li&gt;How to use Husky to format all the files from each commit automatically&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I also learned some soft skills that are essential for any developer:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;How to communicate effectively with other developers&lt;/li&gt;
&lt;li&gt;How to better collaborate on open source projects&lt;/li&gt;
&lt;li&gt;How to write clear and concise code comments and documentation&lt;/li&gt;
&lt;li&gt;How to write good bug reports and pull requests&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Benefits
&lt;/h3&gt;

&lt;p&gt;Participating in Hacktoberfest 2023 was not only a learning experience but also a rewarding one. Some of the benefits that I gained from it were:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Contributing to open source projects that are useful and meaningful for me and others&lt;/li&gt;
&lt;li&gt;Connecting with other developers from different backgrounds and levels of expertise&lt;/li&gt;
&lt;li&gt;Earning some cool swag from Hacktoberfest organizers and sponsors&lt;/li&gt;
&lt;li&gt;Having fun and enjoying the process of creating and sharing&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>hack23contributor</category>
      <category>hacktoberfest23</category>
      <category>opensource</category>
      <category>github</category>
    </item>
    <item>
      <title>Azure Fundamentals</title>
      <dc:creator>Eduard Constantin</dc:creator>
      <pubDate>Sat, 07 Oct 2023 09:38:06 +0000</pubDate>
      <link>https://dev.to/_eduard26/azure-fundamentals-2de8</link>
      <guid>https://dev.to/_eduard26/azure-fundamentals-2de8</guid>
      <description>&lt;h3&gt;
  
  
  Intro
&lt;/h3&gt;

&lt;p&gt;👋 Hey there! This year, I'm excited to invite you to contribute to my Hacktoberfest 2023 GitHub repositories. It's an opportunity for us to collaborate, learn, and make a meaningful impact in the open-source community. &lt;br&gt;
🌐 You can find my GitHub profile &lt;a href="https://github.com/eduardconstantin" rel="noopener noreferrer"&gt;here&lt;/a&gt;, where I maintain a collection of projects related to web development and, of course, some exciting Hacktoberfest initiatives.&lt;/p&gt;

&lt;h3&gt;
  
  
  About the Project
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://github.com/eduardconstantin/azure-fundamentals" rel="noopener noreferrer"&gt;Azure Fundamentals&lt;/a&gt; is a project that I created to learn cloud computing with Azure and it is one of the projects that is heavily under development with a lot of help from the community.&lt;br&gt;
The main goal of this project is to help others prepare for the AZ-900: Microsoft Azure Fundamentals certification exam.&lt;br&gt;
You can also check out the live demo of the web application here: &lt;a href="https://nice-sky-0509a9903.2.azurestaticapps.net" rel="noopener noreferrer"&gt;Azure Fundamentals Demo&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%2F8wyevn8xz0dmkgoad4al.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%2F8wyevn8xz0dmkgoad4al.png" alt="Azure Fundamentals" width="800" height="534"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  👩‍💻 Contributing
&lt;/h4&gt;

&lt;p&gt;Contributions from the community are the heartbeat of this project. I've set up a streamlined process to ensure that your ideas, code improvements, and suggestions are welcomed with open arms:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Fork and Clone: Begin by forking the repository and cloning it to your local environment.&lt;/li&gt;
&lt;li&gt;Create a Branch: For each feature, bug fix, or enhancement you want to propose, create a dedicated branch from the dev branch. This keeps things organized.&lt;/li&gt;
&lt;li&gt;Code Away: Make your changes, write new features, or fix bugs. Ensure that your code adheres to our coding standards.&lt;/li&gt;
&lt;li&gt;Pull Request: Once you're satisfied with your changes, submit a pull request.&lt;/li&gt;
&lt;li&gt;Code Review: Pull requests go through a thorough code review process to ensure that they align with project goals and quality standards.&lt;/li&gt;
&lt;li&gt;Merge: After a successful review, your pull request will be merged into the dev branch and soon into the main branch.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Congratulations, your contribution is now part of Azure Fundamentals!&lt;/strong&gt;&lt;/p&gt;

</description>
      <category>hack23maintainer</category>
      <category>hacktoberfest23</category>
      <category>webdev</category>
      <category>react</category>
    </item>
    <item>
      <title>Hacktoberfest 2023 Pledge: My Journey, Goals and Projects</title>
      <dc:creator>Eduard Constantin</dc:creator>
      <pubDate>Sun, 01 Oct 2023 18:44:29 +0000</pubDate>
      <link>https://dev.to/_eduard26/hacktoberfest-2023-my-journey-goals-and-projects-2032</link>
      <guid>https://dev.to/_eduard26/hacktoberfest-2023-my-journey-goals-and-projects-2032</guid>
      <description>&lt;h3&gt;
  
  
  Intro
&lt;/h3&gt;

&lt;p&gt;Hey there, DEV community! 👋 I'm Eduard, a passionate web application developer hailing from Romania, with 5 years of experience in crafting web solutions using technologies like React, Next.js and GraphQL. While I can talk tech and web dev endlessly, I've also got &lt;a href="https://dribbble.com/Eduard26" rel="noopener noreferrer"&gt;a creative side&lt;/a&gt; — I love to sketch and immerse myself in video games, from online shooters like Counter-Strike 2 to the latest releases in the gaming world.&lt;br&gt;
As someone deeply ingrained in the world of web development, I've always believed in the power of open source and the collaborative spirit of the developer community. Hacktoberfest, to me, is an opportunity to give back, learn from others, and be part of something bigger.&lt;/p&gt;

&lt;h3&gt;
  
  
  Background
&lt;/h3&gt;

&lt;p&gt;I first heard about this amazing event last year through the buzzing tech community. The idea of contributing to open source projects and collaborating with developers from all corners of the world intrigued me. It was a chance to not only enhance my skills but also give back to the community that had nurtured my passion for coding.&lt;br&gt;
So, here I am, motivated and excited to dive into Hacktoberfest for the second year. Whether you're a seasoned coder or just starting your coding journey like I once did, remember that Hacktoberfest welcomes everyone. It's a celebration of open source, creativity, and the magic that happens when developers unite for a common cause.&lt;/p&gt;

&lt;h3&gt;
  
  
  Pledge
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Collaboration and Learning&lt;/strong&gt;&lt;br&gt;
I pledge to actively seek out opportunities to collaborate with fellow developers from diverse backgrounds and skill levels. Whether it's fixing a bug, improving documentation, or adding a new feature, I'm here to learn from others and share my knowledge. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Giving Back to the Community&lt;/strong&gt;&lt;br&gt;
One of my primary motivations for participating in Hacktoberfest is to give back to the community that has nurtured my growth as a developer. I'm committed to making meaningful contributions to open source projects that benefit others. It's a way of saying "thank you" to the countless developers who have shared their knowledge and code with me.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Exploring New Territories&lt;/strong&gt;&lt;br&gt;
Hacktoberfest is also an opportunity to step out of my comfort zone. I'm open to exploring projects and technologies I haven't worked with before. Whether it's a new programming language, framework, or domain, I'm excited to broaden my skills and embrace the adventure.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Welcoming Contributions to My Projects&lt;/strong&gt;&lt;br&gt;
In addition to contributing to other open source projects, I'm eager to play the role of a maintainer during Hacktoberfest. I have a new and exciting project in mind, and I'm inviting fellow developers to join me in shaping it. Whether you're an experienced developer or just starting out, I'm committed to providing a welcoming and inclusive environment for contributors.&lt;br&gt;
I also have a few existing projects that could use some love and enhancements. I'm inviting developers to collaborate with me on these projects, whether it's fixing bugs, optimizing performance, or adding new features.&lt;/p&gt;

&lt;p&gt;This week I will continue posting new articles about these projects in order to keep everyone up to date.&lt;/p&gt;

</description>
      <category>hacktoberfest23</category>
    </item>
    <item>
      <title>Counter-Strike 2 Button</title>
      <dc:creator>Eduard Constantin</dc:creator>
      <pubDate>Mon, 11 Sep 2023 17:12:06 +0000</pubDate>
      <link>https://dev.to/_eduard26/counter-strike-2-button-3bj</link>
      <guid>https://dev.to/_eduard26/counter-strike-2-button-3bj</guid>
      <description>&lt;p&gt;Impatiently waiting for what felt like an eternity, I finally gained access to Counter-Strike 2 beta.🎮&lt;/p&gt;

&lt;p&gt;The game's new UI is nothing short of spectacular, but one element in particular caught my eye — the matchmaking button, especially the the background animation&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%2Fjsdtd9y9bbh7rv01ibsu.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%2Fjsdtd9y9bbh7rv01ibsu.png" alt="CS2 matchmaking button" width="752" height="246"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Determined to take on a creative challenge, I set myself a goal for this month - to recreate this button for the web with CSS and animate it with framer motion.&lt;/p&gt;

&lt;p&gt;Creating the animated squares was a breeze, but it was the topographic map did gave me some headaches because I didn't want to use just a simple image.&lt;/p&gt;

&lt;p&gt;After some relentless tinkering and experimentation I managed to generate the map dynamically using an SVG filter, therefore offering endless variations for this button. As you can see bellow, there are more things implemented, like changing the color (it looks mesmerizing in blue), the width and the label.&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%2Fya835yz7wmi4gboqcqk0.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%2Fya835yz7wmi4gboqcqk0.png" alt="CT and T buttons" width="752" height="251"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The code for this project is available on GitHub: &lt;a href="https://github.com/eduardconstantin/react-motion-components" rel="noopener noreferrer"&gt;https://github.com/eduardconstantin/react-motion-components&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;And I also set up a story playground &lt;a href="https://react-motion-components.vercel.app" rel="noopener noreferrer"&gt;here&lt;/a&gt;&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>animation</category>
      <category>challenge</category>
      <category>react</category>
    </item>
    <item>
      <title>Doticons - A collection of minimal dot icons</title>
      <dc:creator>Eduard Constantin</dc:creator>
      <pubDate>Tue, 18 Jul 2023 15:37:18 +0000</pubDate>
      <link>https://dev.to/_eduard26/doticons-a-collection-of-minimal-dot-icons-e2f</link>
      <guid>https://dev.to/_eduard26/doticons-a-collection-of-minimal-dot-icons-e2f</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.amazonaws.com%2Fuploads%2Farticles%2F5mmb7gnclrx8vi34sr8u.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%2F5mmb7gnclrx8vi34sr8u.png" alt=" " width="799" height="202"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Doticons is a comprehensive and carefully curated collection of SVG dot icons. They are based on a 16x16 and 32x32 dot matrix, which gives them a pixelated and retro look. They are also scalable and customizable, so you can adjust their size and color.&lt;/p&gt;

&lt;h2&gt;
  
  
  🎨 What's Inside?
&lt;/h2&gt;

&lt;p&gt;Doticons are free to use and modify for any personal or commercial project. You can download them from my GitHub repository: &lt;a href="https://github.com/eduardconstantin/doticons" rel="noopener noreferrer"&gt;https://github.com/eduardconstantin/doticons&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;You can open a request for adding new icons, improving existing ones, or suggesting new categories or join the discussion tab if you have any feedback or questions.&lt;/p&gt;

&lt;p&gt;I am also looking for contributors to help me improve this project, so open a PR or an issue, I appreciate any feedback, suggestion or improvement.&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>github</category>
      <category>ui</category>
      <category>opensource</category>
    </item>
  </channel>
</rss>
