<?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: Muhammadh Ahzem </title>
    <description>The latest articles on DEV Community by Muhammadh Ahzem  (@ahzem).</description>
    <link>https://dev.to/ahzem</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%2F1184440%2F707e31e5-1c2d-43a1-9fbb-af9e0f9bf6bd.jpeg</url>
      <title>DEV Community: Muhammadh Ahzem </title>
      <link>https://dev.to/ahzem</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/ahzem"/>
    <language>en</language>
    <item>
      <title>KadeQuote — Local-First AI Quotation Maker with Ollama &amp; Gemma 3 1B | Hacktoberfest 2026</title>
      <dc:creator>Muhammadh Ahzem </dc:creator>
      <pubDate>Tue, 13 Oct 2026 09:05:15 +0000</pubDate>
      <link>https://dev.to/ahzem/kadequote-local-first-ai-quotation-maker-with-ollama-gemma-3-1b-hacktoberfest-2026-34j0</link>
      <guid>https://dev.to/ahzem/kadequote-local-first-ai-quotation-maker-with-ollama-gemma-3-1b-hacktoberfest-2026-34j0</guid>
      <description>&lt;p&gt;&lt;em&gt;This is a submission for the &lt;a href="https://dev.to/challenges/hacktoberfest-week2-2026-10-12"&gt;Hacktoberfest Open-Source AI Challenge Week 2: Side Hustle&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

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

&lt;p&gt;Every day, millions of independent tradespeople—electricians, plumbers, HVAC technicians, and mobile repair specialists—run their own side hustles and micro-businesses. &lt;/p&gt;

&lt;p&gt;Yet their biggest daily productivity leak happens after the physical job is done: &lt;strong&gt;turning messy on-site notes into formal quotation documents&lt;/strong&gt;. &lt;/p&gt;

&lt;p&gt;A contractor might type a rushed note on their phone:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;"Replace 3 switches, repair one electrical socket, labour 2500 rupees, switches cost 450 each and socket repair parts 800."&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Turning that note into a professional quote usually takes 15 to 20 minutes of manual data entry, calculator arithmetic, and template formatting. Many tradespeople delay sending quotes, lose prospective clients to faster competitors, or make costly calculation mistakes.&lt;/p&gt;

&lt;h3&gt;
  
  
  Enter KadeQuote
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;KadeQuote&lt;/strong&gt; is an open-source, &lt;strong&gt;local-first AI quotation maker&lt;/strong&gt; that transforms rough trade shorthand into professional, itemized PDF quotations in seconds.&lt;/p&gt;

&lt;h3&gt;
  
  
  Key Value Propositions
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Instant Note Interpretation&lt;/strong&gt;: Powered by Google’s open-weight &lt;strong&gt;Gemma 3 1B&lt;/strong&gt; running locally on &lt;strong&gt;Ollama&lt;/strong&gt;, KadeQuote extracts items, separates materials from labour, matches catalog prices, and flags missing values for human review.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Zero Cloud Dependencies &amp;amp; Total Privacy&lt;/strong&gt;: Customer names, phone numbers, and job addresses are stored exclusively in the browser's IndexedDB. No customer records ever touch external AI servers.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Deterministic Financial Engine&lt;/strong&gt;: Line totals, percentage/fixed discounts, transport charges, and estimated taxes are computed using strict 2-decimal arithmetic in TypeScript—never hallucinated by the LLM.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Professional PDF Export&lt;/strong&gt;: Produces high-contrast, printable PDF quotations complete with company branding, logo, payment terms, and signature acceptance lines.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Completely Free for Solo Hustlers&lt;/strong&gt;: No monthly SaaS fees, no cloud tokens to purchase, and works 100% offline once downloaded.&lt;/li&gt;
&lt;/ol&gt;




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

&lt;p&gt;Watch the complete walk-through demo below:&lt;/p&gt;

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

&lt;p&gt;Direct Video Link: &lt;a href="https://youtu.be/WmtRW8GIm-g" rel="noopener noreferrer"&gt;https://youtu.be/WmtRW8GIm-g&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  What the demo shows:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;0:00 – 0:30&lt;/strong&gt;: Dashboard overview with live local AI connectivity status.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;0:30 – 0:55&lt;/strong&gt;: Configuring business profile, logo branding, and reusable price lists.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;0:55 – 1:35&lt;/strong&gt;: Live inference with Gemma 3 1B parsing messy job shorthand into itemized entries.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;1:35 – 2:15&lt;/strong&gt;: Interactive item review, adding custom materials, and configuring deterministic discounts and taxes.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;2:15 – 2:50&lt;/strong&gt;: Live document preview and downloading the finished vector PDF.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;2:50 – 3:20&lt;/strong&gt;: Local IndexedDB storage, sequential quotation numbering (&lt;code&gt;KQ-2026-0001&lt;/code&gt;), and JSON backup export.&lt;/li&gt;
&lt;/ul&gt;




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

&lt;p&gt;The complete source code is open source under the MIT License:&lt;/p&gt;


&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://assets.dev.to/assets/github-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/Ahzem" rel="noopener noreferrer"&gt;
        Ahzem
      &lt;/a&gt; / &lt;a href="https://github.com/Ahzem/kadequote" rel="noopener noreferrer"&gt;
        kadequote
      &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;KadeQuote — Local-First AI Quotation Maker&lt;/h1&gt;
&lt;/div&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Private, on-device AI quotation generator for electricians, plumbers, repair technicians, and small service businesses.&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Built with &lt;strong&gt;Next.js (App Router)&lt;/strong&gt; and &lt;strong&gt;Ollama running Gemma 3 1B&lt;/strong&gt;. Customer data and quotations never leave your machine.&lt;/p&gt;

&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;🌟 Key Features&lt;/h2&gt;
&lt;/div&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Local-First AI Note Parser (&lt;code&gt;gemma3:1b&lt;/code&gt;)&lt;/strong&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Converts informal job notes (e.g., &lt;em&gt;"Replace 3 switches, repair socket, labour 2500 rupees, switches 450 each and socket parts 800"&lt;/em&gt;) into structured line items.&lt;/li&gt;
&lt;li&gt;Intelligent categorization (&lt;code&gt;material&lt;/code&gt;, &lt;code&gt;labour&lt;/code&gt;, &lt;code&gt;service&lt;/code&gt;, &lt;code&gt;other&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;Automatically cross-references your saved business price list.&lt;/li&gt;
&lt;li&gt;Strictly marks uncertain/unpriced items as requiring human review—no silent hallucination.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;100% Offline &amp;amp; Private (IndexedDB via &lt;code&gt;idb&lt;/code&gt;)&lt;/strong&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Stores quotations, business profiles, and numbering sequences locally in the browser.&lt;/li&gt;
&lt;li&gt;Zero external cloud AI APIs (no OpenAI, no Anthropic, no telemetry).&lt;/li&gt;
&lt;li&gt;Works offline once the app and model are loaded.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Deterministic Financial Calculations&lt;/strong&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Strict 2-decimal…&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;&lt;/div&gt;
  &lt;/div&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/Ahzem/kadequote" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;


&lt;p&gt;Repository Link: &lt;strong&gt;&lt;a href="https://github.com/Ahzem/kadequote.git" rel="noopener noreferrer"&gt;https://github.com/Ahzem/kadequote.git&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Repository Architecture
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;kadequote/
├── app/
│   ├── api/ai/parse-quotation/  # Server-side Route Handler interfacing with Ollama
│   ├── api/ai/status/           # Real-time health check for local Ollama &amp;amp; Gemma
│   ├── globals.css              # Tailwind CSS styling tokens
│   ├── layout.tsx               # Root app layout &amp;amp; metadata
│   └── page.tsx                 # Single-page application coordinator &amp;amp; reactive state
├── components/
│   ├── business/                # Business profile, logo upload &amp;amp; catalog manager
│   ├── dashboard/               # Real-time metrics computed from IndexedDB
│   ├── quotations/              # 5-step quotation wizard, table &amp;amp; preview modal
│   ├── settings/                # Ollama diagnostics, data backup &amp;amp; factory reset
│   └── ui/                      # Accessible toast system &amp;amp; confirmation dialogs
├── lib/
│   ├── ai/                      # Ollama client, JSON parser &amp;amp; few-shot prompts
│   ├── calculations/            # Deterministic 2-decimal rounded financial engine
│   ├── db/                      # Browser IndexedDB persistence layer (idb)
│   ├── pdf/                     # Printable PDF generator (jsPDF + autotable)
│   └── validation/              # Strict Zod schemas for AI, forms &amp;amp; backups
└── tests/                       # 30 automated Vitest unit &amp;amp; live AI tests
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






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

&lt;p&gt;KadeQuote was built from the ground up to demonstrate how lightweight open-weight models can power real-world, privacy-sensitive micro-tools:&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%2Fazjqi4arpm0go1a9pqx6.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%2Fazjqi4arpm0go1a9pqx6.png" alt="Clean Architecture Diagram with Subgraphs" width="799" height="340"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  1. Open-Weight AI Core: Gemma 3 1B on Ollama
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Model Choice&lt;/strong&gt;: Google’s &lt;code&gt;gemma3:1b&lt;/code&gt; (Q4_K_M quantized, ~815 MB). It is compact enough to run smoothly on everyday laptops and workstations without a dedicated GPU.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Controlled Prompt Engineering&lt;/strong&gt;: A structured system prompt with few-shot examples instructs the model to extract descriptions, quantities, units, unit prices, and categorize them into &lt;code&gt;material&lt;/code&gt;, &lt;code&gt;labour&lt;/code&gt;, &lt;code&gt;service&lt;/code&gt;, or &lt;code&gt;other&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Anti-Hallucination Guardrails&lt;/strong&gt;: If an item price is unstated and not found in the technician's saved price list, Gemma returns &lt;code&gt;unitPrice: null&lt;/code&gt; and flags &lt;code&gt;needsReview: true&lt;/code&gt;. The prompt strictly forbids inventing customer names or addresses.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  2. Robust JSON Sanitization &amp;amp; Parsing
&lt;/h3&gt;

&lt;p&gt;LLMs can occasionally wrap JSON in explanatory text or markdown blocks. The extraction pipeline uses multi-stage parsing (direct JSON -&amp;gt; markdown code block regex -&amp;gt; outer brace matcher) validated through &lt;strong&gt;Zod&lt;/strong&gt; (&lt;code&gt;AIRawOutputSchema&lt;/code&gt;), ensuring the client never crashes on unexpected tokens.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. Local-First Persistence with IndexedDB
&lt;/h3&gt;

&lt;p&gt;Using the &lt;code&gt;idb&lt;/code&gt; library, KadeQuote stores all records in &lt;code&gt;kadequote_local_db&lt;/code&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Quotations with status indexing (&lt;code&gt;draft&lt;/code&gt; vs &lt;code&gt;finalized&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;Business branding, terms, and custom Base64 logos&lt;/li&gt;
&lt;li&gt;Atomic quotation numbering state (&lt;code&gt;KQ-2026-0001&lt;/code&gt;), preventing accidental duplicate quote numbers&lt;/li&gt;
&lt;li&gt;Full offline JSON backup export and schema-validated restore&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  4. Deterministic Calculations (Zero AI Math)
&lt;/h3&gt;

&lt;p&gt;Financial arithmetic should never be delegated to language models. A dedicated module (&lt;code&gt;lib/calculations/quotation.ts&lt;/code&gt;) handles line totals, percentage or fixed discounts, additional transport charges, and user-configured tax rates with deterministic rounding (&lt;code&gt;Math.round((val + Number.EPSILON) * 100) / 100&lt;/code&gt;).&lt;/p&gt;

&lt;h3&gt;
  
  
  5. Automated Testing
&lt;/h3&gt;

&lt;p&gt;The codebase includes &lt;strong&gt;30 automated tests in Vitest&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;15 calculation tests (rounding, negative clamps, capped discounts, tax bases)&lt;/li&gt;
&lt;li&gt;11 validation tests (Zod parsing, category normalization, backup structure)&lt;/li&gt;
&lt;li&gt;2 numbering tests (sequence padding)&lt;/li&gt;
&lt;li&gt;2 live integration tests verifying that local Ollama and &lt;code&gt;gemma3:1b&lt;/code&gt; parse real-world notes accurately&lt;/li&gt;
&lt;/ul&gt;




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

&lt;p&gt;Building KadeQuote with open innovation—specifically open-weight models and local inference—fundamentally changed what was possible:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Absolute Data Privacy&lt;/strong&gt;: Trade contractors deal with sensitive homeowner information: residential addresses, direct phone numbers, security gate codes, and proprietary labour margins. Uploading this to cloud APIs creates serious compliance, leakage, and data-mining concerns. Running Gemma 3 1B locally ensures that &lt;strong&gt;zero bytes of customer data leave the laptop&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Eliminating the Micro-SaaS "Toll"&lt;/strong&gt;: For a solo electrician or plumber, paying a $29/month subscription for an invoicing tool is an unnecessary tax on their side hustle. Open-weight models empower developers to build free, zero-marginal-cost software that users can own forever.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;True Offline Independence&lt;/strong&gt;: Job sites (basements, remote properties, new constructions) frequently lack reliable mobile data. Because Ollama runs locally on &lt;code&gt;127.0.0.1&lt;/code&gt;, KadeQuote continues to function without internet connectivity.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Predictability and Durability&lt;/strong&gt;: Closed APIs can deprecate endpoints, change pricing tiers, or alter model behaviors overnight. With open weights, the software you build today will run exactly the same way five years from now.&lt;/li&gt;
&lt;/ol&gt;




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

&lt;p&gt;This project was built pair-programming with Google DeepMind's agentic engineering assistant &lt;strong&gt;Antigravity&lt;/strong&gt;. &lt;/p&gt;

&lt;p&gt;The agent assisted throughout the entire software development lifecycle:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Bootstrapping the Next.js 16 App Router architecture and configuring Tailwind CSS v4.&lt;/li&gt;
&lt;li&gt;Creating the robust Ollama HTTP bridge with strict timeout and fallback handling.&lt;/li&gt;
&lt;li&gt;Designing the deterministic financial calculation utilities and writing comprehensive Vitest suites.&lt;/li&gt;
&lt;li&gt;Resolving edge cases like React 19's &lt;code&gt;set-state-in-effect&lt;/code&gt; constraints and Turbopack route caching rules.&lt;/li&gt;
&lt;li&gt;Generating the comprehensive automated test suite and live Ollama integration test.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;All 30 automated tests were executed and validated on Windows 11 with 100% test passes and zero lint errors.&lt;/p&gt;




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

&lt;p&gt;To test KadeQuote against realistic real-world conditions, I shared the tool with a friend who operates a residential electrical repair and wiring side hustle.&lt;/p&gt;

&lt;h3&gt;
  
  
  The Real-World Test
&lt;/h3&gt;

&lt;p&gt;He tested it with his usual messy job shorthand:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;"Replace 3 switches, repair one electrical socket, labour 2500 rupees, switches cost 450 each and socket repair parts 800."&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  What He Said:
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;"Normally I write these down on a notepad in my van and then re-calculate everything at home in Excel or on WhatsApp. It usually takes me 15 minutes per quote, and sometimes I forget what I paid for the parts. With this, I pasted my shorthand, clicked generate, and had a clean PDF ready to send before I even drove away from the customer's house."&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;His favorite feature was the &lt;strong&gt;Saved Price List Reference&lt;/strong&gt;: because his common replacement parts (switches, MCB breakers, standard hourly diagnostics) were pre-saved, Gemma 3 1B automatically filled in the default unit prices even when he forgot to write the cost down in his notes.&lt;/p&gt;




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

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Primary Track&lt;/strong&gt;: Hacktoberfest Open-Source AI Challenge Week 2: Side Hustle&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Partner Categories&lt;/strong&gt;:

&lt;ul&gt;
&lt;li&gt;Open Innovation &amp;amp; Local-First AI&lt;/li&gt;
&lt;li&gt;Micro-SaaS &amp;amp; Developer Productivity&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;&lt;em&gt;Built with Next.js 16, Ollama, Gemma 3 1B, and Tailwind CSS. Open-source under the MIT License.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>devchallenge</category>
      <category>hf26challenge</category>
    </item>
    <item>
      <title>GemTrail: The AI That Tells You to Put Your Phone Away</title>
      <dc:creator>Muhammadh Ahzem </dc:creator>
      <pubDate>Tue, 06 Oct 2026 04:59:15 +0000</pubDate>
      <link>https://dev.to/ahzem/gemtrail-the-ai-that-tells-you-to-put-your-phone-away-251i</link>
      <guid>https://dev.to/ahzem/gemtrail-the-ai-that-tells-you-to-put-your-phone-away-251i</guid>
      <description>&lt;p&gt;&lt;em&gt;This is a submission for the &lt;a href="https://dev.to/challenges/hacktoberfest-week1-2026-10-05"&gt;Hacktoberfest Open-Source AI Challenge Week 1: Touch Grass&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;




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

&lt;p&gt;Most modern AI applications are designed to optimize for screen time—infinite chat feeds, constant notifications, and endless scrolling. &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%2Fvzwl8ee2bl9ca7ph9q38.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%2Fvzwl8ee2bl9ca7ph9q38.png" alt=" " width="800" height="728"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;GemTrail&lt;/strong&gt; was built around the exact opposite philosophy:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;"The AI should help the user explore the real world, not keep the user staring at the screen."&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;GemTrail&lt;/strong&gt; is an AI-powered outdoor field observation companion. Instead of an unreliable computer-vision camera classifier that guesses gemstone names with false certainty, GemTrail serves as a &lt;strong&gt;patient natural observation coach&lt;/strong&gt;:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Screen Break / Field Mode&lt;/strong&gt;: It presents a 5-minute outdoor field mission (e.g. &lt;em&gt;Two-Tone Rock Explorer&lt;/em&gt;, &lt;em&gt;The Tactile Hunter&lt;/em&gt;, or &lt;em&gt;Sunlight Sparkle Search&lt;/em&gt;) and intentionally instructs the user to put their phone in their pocket and step outside.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Guided Sensory Intake&lt;/strong&gt;: When the user returns, they log what they directly felt and observed—color gradients, grain texture, angularity, hydrothermal quartz veins, or sunlight specular reflections.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Local AI Observation Coach&lt;/strong&gt;: Powered by &lt;strong&gt;Gemma 3 1B&lt;/strong&gt; running completely on-device via &lt;strong&gt;Ollama&lt;/strong&gt;, GemTrail explains geological mechanisms as possibilities (sedimentary strata, metamorphic foliation, hydraulic tumbling) without pretending to make definitive laboratory diagnoses.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Actionable Next Outdoor Test&lt;/strong&gt;: It prompts the user with one specific physical check to perform outside (e.g. tilting under sunlight to test cleavage planes, or wetting the rock to reveal hidden grain boundaries).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Private Field Journal&lt;/strong&gt;: Kept entirely in the browser's &lt;code&gt;localStorage&lt;/code&gt;—no accounts, no tracking, and no cloud databases.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;It is made for hikers, curious neighborhood explorers, students, and anyone who wants to rediscover the physical geology right under their feet.&lt;/p&gt;




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

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

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Video Walkthrough&lt;/strong&gt;: &lt;a href="https://youtu.be/Guhca29LI18" rel="noopener noreferrer"&gt;https://youtu.be/Guhca29LI18&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Live Code Repository&lt;/strong&gt;: &lt;a href="https://github.com/Ahzem/gemtrial" rel="noopener noreferrer"&gt;https://github.com/Ahzem/gemtrial&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Local Dev Server&lt;/strong&gt;: Runs on &lt;code&gt;http://localhost:3000&lt;/code&gt; with local Ollama (&lt;code&gt;http://localhost:11434&lt;/code&gt;)&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Demo Highlights:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;0:00–0:20&lt;/strong&gt;: Introduction &amp;amp; Philosophy — why AI should encourage outdoor presence.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;0:20–0:45&lt;/strong&gt;: Field Mode Screen Break — starting a 5-minute outdoor timer with breathing animations.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;0:45–1:15&lt;/strong&gt;: Stepping outside — finding a natural specimen and observing colors, bands, and textures.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;1:15–1:45&lt;/strong&gt;: Recording observations &amp;amp; consulting Gemma 3 1B on-device.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;1:45–2:00&lt;/strong&gt;: Terminal proof showing &lt;code&gt;ollama list&lt;/code&gt; with &lt;code&gt;gemma3:1b&lt;/code&gt; running privately with zero cloud API keys.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Code
&lt;/h2&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/Ahzem" rel="noopener noreferrer"&gt;
        Ahzem
      &lt;/a&gt; / &lt;a href="https://github.com/Ahzem/gemtrial" rel="noopener noreferrer"&gt;
        gemtrial
      &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;🌿 GemTrail&lt;/h1&gt;
&lt;/div&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;An AI-powered outdoor field companion that helps people observe, investigate, and document rocks, minerals, and natural objects they discover outside.&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;a href="https://nextjs.org/" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/4dec74a9ffc7525581ee8e6aea1544591dc5ecf81dc72527582f61efa889f0e7/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f4e6578742e6a732d31362e332d626c61636b3f7374796c653d666c6174266c6f676f3d6e6578742e6a73" alt="Next.js"&gt;&lt;/a&gt;
&lt;a href="https://react.dev/" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/5c53c5b28b147ca86f04ccd84e2034bc0cda4f56c6672a8cec902076f5cd22d2/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f52656163742d31392d626c75653f7374796c653d666c6174266c6f676f3d7265616374" alt="React"&gt;&lt;/a&gt;
&lt;a href="https://www.typescriptlang.org/" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/8d5257c66a21d6518118e39cfe892ed3e407179e04193093ec232d0f733701bf/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f547970655363726970742d352d626c75653f7374796c653d666c6174266c6f676f3d74797065736372697074" alt="TypeScript"&gt;&lt;/a&gt;
&lt;a href="https://tailwindcss.com/" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/9bd3f8f57605ce3b38c09dc9501997ffef72c3ddb0bc234011fab0553dad0221/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f5461696c77696e644353532d76342d3338626466383f7374796c653d666c6174266c6f676f3d7461696c77696e64637373" alt="Tailwind CSS"&gt;&lt;/a&gt;
&lt;a href="https://ollama.com/library/gemma3" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/a18a7f6d5fe4d5de58dd9e804cbba21604deef2da735b6e401608eff511ce62f/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f4f6c6c616d612d47656d6d612532303325323031422d626c61636b3f7374796c653d666c6174" alt="Ollama"&gt;&lt;/a&gt;
&lt;a href="https://github.com/Ahzem/gemtrial/LICENSE" rel="noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/784362b26e4b3546254f1893e778ba64616e362bd6ac791991d2c9e880a3a64e/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f4c6963656e73652d4d49542d677265656e2e737667" alt="License"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;💡 The Core Philosophy&lt;/h2&gt;
&lt;/div&gt;
&lt;p&gt;Most AI applications are designed to keep you glued to a screen. &lt;strong&gt;GemTrail is designed around the opposite idea:&lt;/strong&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;"The AI should help the user explore the real world, not keep the user staring at the screen."&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Instead of building a computer-vision camera classifier that guesses gemstone names with false certainty, &lt;strong&gt;GemTrail acts as an outdoor observation coach&lt;/strong&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;It prompts you to put your phone away.&lt;/li&gt;
&lt;li&gt;It guides you on 5-minute outdoor missions.&lt;/li&gt;
&lt;li&gt;It teaches you how to look for cleavage planes, hydrothermal veins, striations, and sunlight glints with your own eyes.&lt;/li&gt;
&lt;li&gt;It runs an open-weight model (&lt;strong&gt;Gemma 3 1B&lt;/strong&gt;) 100% locally on your machine—ensuring complete privacy and zero cloud dependencies.&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;✨ Features&lt;/h2&gt;
&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;⏱️ &lt;strong&gt;Field Mode &amp;amp; Screen Break&lt;/strong&gt;: A…&lt;/li&gt;
&lt;/ul&gt;&lt;/div&gt;
  &lt;/div&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/Ahzem/gemtrial" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;


&lt;p&gt;Repository link: &lt;a href="https://github.com/Ahzem/gemtrial" rel="noopener noreferrer"&gt;https://github.com/Ahzem/gemtrial&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The complete stack is open-source:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Next.js 16&lt;/strong&gt; (App Router) + &lt;strong&gt;React 19&lt;/strong&gt; + &lt;strong&gt;TypeScript&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Tailwind CSS v4&lt;/strong&gt; with glassmorphism and outdoor dark-mode aesthetics&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Ollama API Client&lt;/strong&gt; calling &lt;code&gt;gemma3:1b&lt;/code&gt; with strict structured JSON output and fallback heuristics&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Web Audio API&lt;/strong&gt; synthesized chimes for the Field Mode timer&lt;/li&gt;
&lt;/ul&gt;




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

&lt;h3&gt;
  
  
  1. Local Open-Weight Model: Gemma 3 1B on Ollama
&lt;/h3&gt;

&lt;p&gt;I chose &lt;strong&gt;Gemma 3 1B&lt;/strong&gt;, Google's lightweight open-weight model, served via the local &lt;strong&gt;Ollama&lt;/strong&gt; daemon (&lt;code&gt;http://127.0.0.1:11434&lt;/code&gt;). At only ~815 MB, it loads fast on ordinary consumer hardware and delivers near-instant inference with zero cloud latency and zero API fees.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. Guardrailed Observation Coach Prompt
&lt;/h3&gt;

&lt;p&gt;Rather than asking the model to hallucinate mineral names, I engineered a disciplined system prompt:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;You are GemTrail, an outdoor field observation companion.
You are an observation coach, NOT a professional geologist or gemologist.

IMPORTANT RULES:
- Never claim that you can positively identify a rock, mineral, or gemstone from a simple description.
- Never invent scientific facts about an unknown object.
- Clearly distinguish observations from possibilities.
- Encourage the user to observe the object themselves outside.
- Give the user one useful next observation to make in the sunlight.
- Remind users to practice Leave No Trace.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The route handler (&lt;code&gt;app/api/gemtrail/route.ts&lt;/code&gt;) validates connection health, queries the local model, parses structured responses, and logs latency.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. "Touch Grass" Screen Break UX
&lt;/h3&gt;

&lt;p&gt;The application is built around the &lt;code&gt;FieldModeScreenBreak&lt;/code&gt; component. When a user accepts a mission, the app transitions into an ambient field display, initiates a 5-minute timer with a gentle breathing pulse, and prompts:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;"Put your phone away. Spend 5 minutes observing. We'll be here when you return."&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;




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

&lt;p&gt;Open innovation is the entire backbone of what makes GemTrail viable and ethical:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;True Privacy in Nature&lt;/strong&gt;: Closed APIs require transmitting personal exploration notes, photos, and timestamps to remote corporate servers. By using open-weight Gemma 3 running locally on Ollama, &lt;strong&gt;observations never leave the user's machine&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Offline &amp;amp; Remote Capability&lt;/strong&gt;: Nature trails and state parks rarely have dependable 5G connectivity. Open-weight models empower users to bring intelligent observation tools into off-grid wilderness environments.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;No Financial Gatekeeping&lt;/strong&gt;: Closed LLMs require recurring API keys and credit cards. Open models let students, park rangers, and backyard hobbyists explore science freely without fearing a cloud billing spike.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Resilience &amp;amp; Independence&lt;/strong&gt;: When an app is built around open weights and local code, it never breaks because an upstream API changed its pricing tier or discontinued an endpoint.&lt;/li&gt;
&lt;/ol&gt;




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

&lt;p&gt;Developed with pair-programming assistance from Antigravity IDE, testing TypeScript schemas, Next.js 16 routing conventions, and live local Ollama model verification.&lt;/p&gt;




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

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Touch Grass Track&lt;/strong&gt; (Getting developers and users outdoors into nature)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Open Innovation Track&lt;/strong&gt; (Harnessing open-weight Gemma 3 1B for local, private, on-device AI)&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>devchallenge</category>
      <category>hf26challenge</category>
    </item>
    <item>
      <title>SpeakMate: A Local AI English Conversation Partner Built for a Friend</title>
      <dc:creator>Muhammadh Ahzem </dc:creator>
      <pubDate>Fri, 02 Oct 2026 11:01:59 +0000</pubDate>
      <link>https://dev.to/ahzem/speakmate-a-local-ai-english-conversation-partner-built-for-a-friend-1hj</link>
      <guid>https://dev.to/ahzem/speakmate-a-local-ai-english-conversation-partner-built-for-a-friend-1hj</guid>
      <description>&lt;h3&gt;
  
  
  🧠 The AI Core: Open-Weight Gemma 3 1B via Ollama
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Model&lt;/strong&gt;: &lt;a href="https://ollama.com/library/gemma3:1b" rel="noopener noreferrer"&gt;Google's Gemma 3 1B&lt;/a&gt; (&lt;code&gt;gemma3:1b&lt;/code&gt;), an open-weight, lightweight language model capable of running smoothly on laptops with minimal RAM and CPU/GPU resources.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Inference Runtime&lt;/strong&gt;: &lt;strong&gt;Ollama&lt;/strong&gt; (&lt;code&gt;http://localhost:11434&lt;/code&gt;), serving local chat completions via standard REST endpoints.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Prompt Engineering&lt;/strong&gt;: Designed a strict system prompt that instructs Gemma 3 1B to act as a supportive conversation partner, prioritize conversational momentum, format corrections into consistent &lt;code&gt;Correction / Why / Continue&lt;/code&gt; blocks, and refrain from critiquing or hallucinating errors.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  💻 Frontend &amp;amp; Architecture
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Framework&lt;/strong&gt;: Next.js 16 (App Router) with React 19 and TypeScript.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Styling&lt;/strong&gt;: Tailwind CSS v4 for a clean, distraction-free aesthetic with soft neutral tones and accessible contrast.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Session-Based Privacy&lt;/strong&gt;: All message history lives exclusively in React memory for the duration of the session — no database, no trackers, and no persistent telemetry.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Structured Parser&lt;/strong&gt;: An intelligent parsing utility parses Gemma's response into dedicated visual cards (emerald for corrections, amber for explanations, and indigo for conversational prompts).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Native Audio Speech&lt;/strong&gt;: Uses the browser's native &lt;code&gt;window.speechSynthesis&lt;/code&gt; API (0 external dependencies) so learners can listen to the correct pronunciation at a comfortable tempo.&lt;/li&gt;
&lt;/ul&gt;




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

&lt;p&gt;Check out the video walkthrough of SpeakMate in action, showing live conversational practice, gentle grammar correction cards, and local inference:&lt;/p&gt;

&lt;p&gt;🎥 &lt;strong&gt;&lt;a href="https://youtu.be/gaQ3e4zaW6I" rel="noopener noreferrer"&gt;Watch the Video Demo on YouTube&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;

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

&lt;p&gt;The complete source code is open source under the MIT License on GitHub:&lt;/p&gt;


&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://assets.dev.to/assets/github-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/Ahzem" rel="noopener noreferrer"&gt;
        Ahzem
      &lt;/a&gt; / &lt;a href="https://github.com/Ahzem/speakmate" rel="noopener noreferrer"&gt;
        speakmate
      &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;🗣️ SpeakMate&lt;/h1&gt;
&lt;/div&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Practice English naturally with your private AI conversation partner.&lt;/strong&gt;&lt;br&gt;
Built as an open-source Hacktoberfest 2026 project.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;SpeakMate is a friendly, distraction-free AI English conversation partner designed for learners who want to practice conversational English without pressure. SpeakMate engages in natural dialog while gently offering clear grammar and wording corrections with simple explanations.&lt;/p&gt;
&lt;p&gt;Best of all, &lt;strong&gt;SpeakMate runs 100% locally on your machine&lt;/strong&gt; using Ollama and Gemma 3 1B. &lt;strong&gt;No OpenAI, Gemini, or Claude API keys required. No cloud subscriptions. Zero telemetry. Complete privacy.&lt;/strong&gt;&lt;/p&gt;

&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;💡 Why SpeakMate Was Built&lt;/h2&gt;
&lt;/div&gt;
&lt;p&gt;Practicing a new language with a native speaker can sometimes feel intimidating or stressful. Traditional grammar check tools are rigid and feel like spellcheckers, while cloud LLMs can be costly, require API keys, and send personal conversations to third-party servers.&lt;/p&gt;
&lt;p&gt;SpeakMate was built to solve this:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Low-Stress Environment&lt;/strong&gt;: A supportive, friendly AI partner that never criticizes or shames your…&lt;/li&gt;
&lt;/ol&gt;&lt;/div&gt;
  &lt;/div&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/Ahzem/speakmate" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;


&lt;p&gt;🔗 &lt;strong&gt;Repository&lt;/strong&gt;: &lt;a href="https://github.com/Ahzem/speakmate" rel="noopener noreferrer"&gt;https://github.com/Ahzem/speakmate&lt;/a&gt;&lt;/p&gt;

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

&lt;p&gt;Why build with open-source AI and local models instead of calling a closed cloud API? For an application like SpeakMate, open innovation is not just an implementation detail — it's the core reason the product works:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Psychological Safety Through Total Privacy&lt;/strong&gt;:&lt;br&gt;
Practicing a language means making mistakes. When users know that every sentence is processed entirely on their laptop's RAM and never sent to a cloud server, their anxiety drops. Open weights give users 100% data sovereignty.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Zero Operating Cost&lt;/strong&gt;:&lt;br&gt;
Cloud APIs charge per token and require credit cards or monthly subscriptions. By running an open-weight 1B parameter model locally, SpeakMate costs &lt;strong&gt;$0 to operate&lt;/strong&gt;. My friend can practice for hours every single day without worrying about API limits or surprise bills.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Offline Resilience&lt;/strong&gt;:&lt;br&gt;
My friend can practice on the train, in a coffee shop with spotty Wi-Fi, or on a flight. Because Gemma 3 1B runs on-device through Ollama, SpeakMate works completely offline.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Freedom from Vendor Lock-In &amp;amp; Deprecation&lt;/strong&gt;:&lt;br&gt;
Closed APIs regularly deprecate model versions, alter system guardrails, or change pricing tiers. With open models and open-source tooling, this software will continue to run exactly as intended for years to come.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;




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

&lt;p&gt;This project was developed with the assistance of agentic pair-programming in Google Antigravity IDE, configuring the local Ollama integration, structuring React 19 hydration-safe UI components, and tuning Gemma 3 1B's few-shot system prompt.&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%2Ffhu687jdjhbt2h2ccewj.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%2Ffhu687jdjhbt2h2ccewj.png" alt=" " width="800" height="499"&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fb9c10mau3lngrqaxt553.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%2Fb9c10mau3lngrqaxt553.png" alt=" " width="800" height="500"&gt;&lt;/a&gt;&lt;/p&gt;




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

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Grand Prize / Overall Winner&lt;/strong&gt; (Hacktoberfest Weekend Challenge: Build for a Friend)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Open-Source AI Track&lt;/strong&gt; (On-device open-weight inference with Gemma 3 1B &amp;amp; Ollama)&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;&lt;em&gt;Thank you to the DEV Community and the Hacktoberfest team for celebrating open innovation and community building!&lt;/em&gt;&lt;/p&gt;

</description>
      <category>devchallenge</category>
      <category>weekendchallenge</category>
      <category>hf26challenge</category>
      <category>webdev</category>
    </item>
    <item>
      <title>My Hacktoberfest 2024 Journey</title>
      <dc:creator>Muhammadh Ahzem </dc:creator>
      <pubDate>Thu, 10 Oct 2024 19:03:52 +0000</pubDate>
      <link>https://dev.to/ahzem/my-hacktoberfest-2024-journey-2n34</link>
      <guid>https://dev.to/ahzem/my-hacktoberfest-2024-journey-2n34</guid>
      <description>&lt;p&gt;This year marks my second Hacktoberfest, and with each passing year, the excitement and learning opportunities around open-source contributions only grow. My journey as a contributor this year has been a mix of challenges, growth, and moments of pride.&lt;/p&gt;

&lt;h3&gt;
  
  
  Learning from Contributions
&lt;/h3&gt;

&lt;p&gt;One of the key things I’ve come to appreciate this Hacktoberfest is the depth of collaboration and knowledge exchange within the open-source community. From fixing bugs to contributing features, each project I worked on had something new to offer. I honed my problem-solving skills, especially in navigating unfamiliar codebases. It’s amazing how much you can learn by just diving into someone else’s project. One notable pull request I worked on involved resolving an issue that seemed minor at first, but as I dug deeper, it challenged my understanding of the technology stack, and I’m proud to say I came out better equipped to handle complex problems.&lt;/p&gt;

&lt;h3&gt;
  
  
  Challenges I Overcame
&lt;/h3&gt;

&lt;p&gt;With every contribution, there are always hurdles. Some projects had outdated documentation or missing dependencies, but these challenges pushed me to explore and experiment on my own. I found myself often debugging not just my code, but the environments themselves. It’s a reminder that open-source is about collaboration at all levels, not just code—sometimes, helping maintainers by updating documentation is as impactful as a pull request. &lt;/p&gt;

&lt;h3&gt;
  
  
  Community Interaction
&lt;/h3&gt;

&lt;p&gt;What made this Hacktoberfest special for me was the community interaction. I made sure to engage with maintainers and other contributors, asking questions when I was stuck and offering advice when I could. This helped me realize that open-source is not just about code, it’s about learning and growing together. One of my highlights this year was contributing to a project where the maintainer was incredibly supportive, offering detailed feedback on my PRs that improved my approach to future contributions.&lt;/p&gt;

&lt;h3&gt;
  
  
  Reflection and Moving Forward
&lt;/h3&gt;

&lt;p&gt;Hacktoberfest isn’t just about completing four PRs; it's about growth. This year, I focused less on the numbers and more on the quality of my contributions. I took my time to learn, and I felt more confident as I submitted each PR. While I didn’t complete all my goals this year, I walk away with a deeper understanding of both coding and collaboration. &lt;/p&gt;

&lt;p&gt;Looking forward, I’m excited to continue contributing to open-source even after Hacktoberfest. It's clear that this annual event is just a stepping stone for continuous involvement in the open-source community. &lt;/p&gt;

&lt;p&gt;Here’s to many more Hacktoberfests and countless contributions in the years to come!&lt;/p&gt;

</description>
      <category>devchallenge</category>
      <category>hacktoberfest</category>
      <category>opensource</category>
    </item>
    <item>
      <title>My Hacktoberfest 2024 Journey</title>
      <dc:creator>Muhammadh Ahzem </dc:creator>
      <pubDate>Thu, 10 Oct 2024 19:03:52 +0000</pubDate>
      <link>https://dev.to/ahzem/my-hacktoberfest-2024-journey-4k34</link>
      <guid>https://dev.to/ahzem/my-hacktoberfest-2024-journey-4k34</guid>
      <description>&lt;p&gt;This year marks my second Hacktoberfest, and with each passing year, the excitement and learning opportunities around open-source contributions only grow. My journey as a contributor this year has been a mix of challenges, growth, and moments of pride.&lt;/p&gt;

&lt;h3&gt;
  
  
  Learning from Contributions
&lt;/h3&gt;

&lt;p&gt;One of the key things I’ve come to appreciate this Hacktoberfest is the depth of collaboration and knowledge exchange within the open-source community. From fixing bugs to contributing features, each project I worked on had something new to offer. I honed my problem-solving skills, especially in navigating unfamiliar codebases. It’s amazing how much you can learn by just diving into someone else’s project. One notable pull request I worked on involved resolving an issue that seemed minor at first, but as I dug deeper, it challenged my understanding of the technology stack, and I’m proud to say I came out better equipped to handle complex problems.&lt;/p&gt;

&lt;h3&gt;
  
  
  Challenges I Overcame
&lt;/h3&gt;

&lt;p&gt;With every contribution, there are always hurdles. Some projects had outdated documentation or missing dependencies, but these challenges pushed me to explore and experiment on my own. I found myself often debugging not just my code, but the environments themselves. It’s a reminder that open-source is about collaboration at all levels, not just code—sometimes, helping maintainers by updating documentation is as impactful as a pull request. &lt;/p&gt;

&lt;h3&gt;
  
  
  Community Interaction
&lt;/h3&gt;

&lt;p&gt;What made this Hacktoberfest special for me was the community interaction. I made sure to engage with maintainers and other contributors, asking questions when I was stuck and offering advice when I could. This helped me realize that open-source is not just about code, it’s about learning and growing together. One of my highlights this year was contributing to a project where the maintainer was incredibly supportive, offering detailed feedback on my PRs that improved my approach to future contributions.&lt;/p&gt;

&lt;h3&gt;
  
  
  Reflection and Moving Forward
&lt;/h3&gt;

&lt;p&gt;Hacktoberfest isn’t just about completing four PRs; it's about growth. This year, I focused less on the numbers and more on the quality of my contributions. I took my time to learn, and I felt more confident as I submitted each PR. While I didn’t complete all my goals this year, I walk away with a deeper understanding of both coding and collaboration. &lt;/p&gt;

&lt;p&gt;Looking forward, I’m excited to continue contributing to open-source even after Hacktoberfest. It's clear that this annual event is just a stepping stone for continuous involvement in the open-source community. &lt;/p&gt;

&lt;p&gt;Here’s to many more Hacktoberfests and countless contributions in the years to come!&lt;/p&gt;

</description>
      <category>devchallenge</category>
      <category>hacktoberfest</category>
      <category>opensource</category>
    </item>
    <item>
      <title>Creating a Symmetrical Star Pattern in Dart</title>
      <dc:creator>Muhammadh Ahzem </dc:creator>
      <pubDate>Tue, 09 Jul 2024 01:49:16 +0000</pubDate>
      <link>https://dev.to/ahzem/creating-a-symmetrical-star-pattern-in-dart-57kj</link>
      <guid>https://dev.to/ahzem/creating-a-symmetrical-star-pattern-in-dart-57kj</guid>
      <description>&lt;p&gt;Hey everyone!&lt;/p&gt;

&lt;p&gt;I recently worked on a fun coding challenge to generate a symmetrical star pattern using Dart. Here's the pattern I wanted to create:&lt;br&gt;
&lt;/p&gt;

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

&lt;/div&gt;



&lt;p&gt;After some trial and error, I came up with the following solution:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight dart"&gt;&lt;code&gt;&lt;span class="kt"&gt;void&lt;/span&gt; &lt;span class="nf"&gt;main&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;n&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="c1"&gt;// Height of the pattern&lt;/span&gt;

  &lt;span class="c1"&gt;// Print the upper half of the pattern&lt;/span&gt;
  &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt; &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;n&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="o"&gt;++&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="n"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;" "&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="s"&gt;"*"&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;

  &lt;span class="c1"&gt;// Print the lower half of the pattern&lt;/span&gt;
  &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;n&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt; &lt;span class="p"&gt;&amp;gt;&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="o"&gt;--&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="n"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;" "&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;n&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="s"&gt;"*"&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="p"&gt;);&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;
  
  
  How It Works:
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;The first loop generates the upper half of the pattern, starting with 1 star and incrementing up to 10 stars, each line indented with increasing spaces.&lt;/li&gt;
&lt;li&gt;The second loop creates the lower half of the pattern, starting from 9 stars down to 1 star, maintaining the symmetry by increasing the leading spaces.&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  Key Takeaways:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;This exercise helped me reinforce my understanding of nested loops and string manipulation in Dart.&lt;/li&gt;
&lt;li&gt;By carefully controlling the number of spaces and stars in each iteration, we can create visually appealing patterns.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Feel free to try it out and let me know if you have any suggestions for improvement!&lt;/p&gt;

&lt;p&gt;Happy coding! 🌟&lt;/p&gt;

</description>
    </item>
    <item>
      <title>First Contributions: learn how to contribute to open source projects</title>
      <dc:creator>Muhammadh Ahzem </dc:creator>
      <pubDate>Thu, 06 Jun 2024 12:01:17 +0000</pubDate>
      <link>https://dev.to/ahzem/first-contributions-learn-how-to-contribute-to-open-source-projects-5cp</link>
      <guid>https://dev.to/ahzem/first-contributions-learn-how-to-contribute-to-open-source-projects-5cp</guid>
      <description>&lt;p&gt;I followed the hands-on tutorial in the Readme of first contributions and made my first pull request to the same repo.&lt;/p&gt;


&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://assets.dev.to/assets/github-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/firstcontributions" rel="noopener noreferrer"&gt;
        firstcontributions
      &lt;/a&gt; / &lt;a href="https://github.com/firstcontributions/first-contributions" rel="noopener noreferrer"&gt;
        first-contributions
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      🚀✨ Help beginners to contribute to open source projects
    &lt;/h3&gt;
  &lt;/div&gt;
  &lt;div class="ltag-github-body"&gt;
    
&lt;div id="readme" class="md"&gt;&lt;p&gt;&lt;a href="https://github.com/firstcontributions/open-source-badges" rel="noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/9422cfcdd1ee314f68d21164fd04c7b2000013a479f22eac8c0bfc5ca753fa8d/68747470733a2f2f6669727374636f6e747269627574696f6e732e6769746875622e696f2f6f70656e2d736f757263652d6261646765732f6261646765732f6f70656e2d736f757263652d76312f6f70656e2d736f757263652e737667" alt="Open Source Love"&gt;&lt;/a&gt;
&lt;a href="https://opensource.org/licenses/MIT" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/784362b26e4b3546254f1893e778ba64616e362bd6ac791991d2c9e880a3a64e/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f4c6963656e73652d4d49542d677265656e2e737667" alt="License: MIT"&gt;&lt;/a&gt;
&lt;a href="https://www.codetriage.com/roshanjossey/first-contributions" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/d32f1a94aa1ed5dd3bc9ed81255a77650fdff8ad9603ec3fa97656401536fbea/68747470733a2f2f7777772e636f64657472696167652e636f6d2f726f7368616e6a6f737365792f66697273742d636f6e747269627574696f6e732f6261646765732f75736572732e737667" alt="Open Source Helpers"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;div class="markdown-heading"&gt;
&lt;h4 class="heading-element"&gt;&lt;em&gt;Read this in &lt;a href="https://github.com/firstcontributions/first-contributions/docs/translations/Translations.md" rel="noopener noreferrer"&gt;other languages&lt;/a&gt;.&lt;/em&gt;&lt;/h4&gt;
&lt;/div&gt;
&lt;p&gt;&lt;a href="https://github.com/firstcontributions/first-contributions/docs/translations/README.al.md" rel="noopener noreferrer"&gt;&lt;img title="Shqip" alt="Shqip" src="https://camo.githubusercontent.com/5f3d1b7928f53b91c0ad2dccee35bb8e04e5431b809832f3f02504c719f67417/68747470733a2f2f63646e2e6a7364656c6976722e6e65742f67682f68616d707573626f72676f732f636f756e7472792d666c616773406d61696e2f7376672f616c2e737667" width="22"&gt;&lt;/a&gt;
&lt;a href="https://github.com/firstcontributions/first-contributions/docs/translations/README.arm.md" rel="noopener noreferrer"&gt;&lt;img title="Armenian" alt="Armenian" src="https://camo.githubusercontent.com/35d435fc4b1e6ebfb86311dfbd59ce576df3698cf700f917935e51261c81b6e5/68747470733a2f2f63646e2e6a7364656c6976722e6e65742f67682f68616d707573626f72676f732f636f756e7472792d666c616773406d61696e2f7376672f616d2e737667" width="22"&gt;&lt;/a&gt;
&lt;a href="https://github.com/firstcontributions/first-contributions/docs/translations/README.uz.md" rel="noopener noreferrer"&gt;&lt;img title="Uzbek" alt="Uzbek language" src="https://camo.githubusercontent.com/c0bbfe1f107d7563798392a42b68b5326f113829d08726d8f29f433eab9c342e/68747470733a2f2f63646e2e6a7364656c6976722e6e65742f67682f68616d707573626f72676f732f636f756e7472792d666c616773406d61696e2f7376672f757a2e737667" width="22"&gt;&lt;/a&gt;
&lt;a href="https://github.com/firstcontributions/first-contributions/docs/translations/README.aze.md" rel="noopener noreferrer"&gt;&lt;img title="Azərbaycan dili" alt="Azərbaycan dili" src="https://camo.githubusercontent.com/39633656110d355e9d5808a8192bd258187fb109df99cd882ecbbbe87b01017a/68747470733a2f2f63646e2e6a7364656c6976722e6e65742f67682f68616d707573626f72676f732f636f756e7472792d666c616773406d61696e2f7376672f617a2e737667" width="22"&gt;&lt;/a&gt;
&lt;a href="https://github.com/firstcontributions/first-contributions/docs/translations/README.bn.md" rel="noopener noreferrer"&gt;&lt;img title="বাংলা" alt="বাংলা" src="https://camo.githubusercontent.com/7eb28916fb556b547384df41f2ef4910e96b569276bafb7c36c1e23050048437/68747470733a2f2f63646e2e6a7364656c6976722e6e65742f67682f68616d707573626f72676f732f636f756e7472792d666c616773406d61696e2f7376672f62642e737667" width="22"&gt;&lt;/a&gt;
&lt;a href="https://github.com/firstcontributions/first-contributions/docs/translations/README.bg.md" rel="noopener noreferrer"&gt;&lt;img title="Bulgarian" alt="Bulgarian" src="https://camo.githubusercontent.com/2c5df7e0f3bc5bed13b9515cb03b9d4b64c845cedcb0b111d5eda81813e1bde6/68747470733a2f2f63646e2e6a7364656c6976722e6e65742f67682f68616d707573626f72676f732f636f756e7472792d666c616773406d61696e2f7376672f62672e737667" width="22"&gt;&lt;/a&gt;
&lt;a href="https://github.com/firstcontributions/first-contributions/docs/translations/README.pt_br.md" rel="noopener noreferrer"&gt;&lt;img title="Português (Brasil)" alt="Português (Brasil)" src="https://camo.githubusercontent.com/54bf07178e385b1cb1238ac4220b3fe73d1821f8c0fdd1d9f4ec8fe0989fce50/68747470733a2f2f63646e2e6a7364656c6976722e6e65742f67682f68616d707573626f72676f732f636f756e7472792d666c616773406d61696e2f7376672f62722e737667" width="22"&gt;&lt;/a&gt;
&lt;a href="https://github.com/firstcontributions/first-contributions/docs/translations/README.ca.md" rel="noopener noreferrer"&gt;&lt;img title="Català" alt="Català" src="https://camo.githubusercontent.com/b0fc80c847a485d3bc706b2ce4ec840f8511f48375f85904642cabda0f722a3b/68747470733a2f2f6669727374636f6e747269627574696f6e732e6769746875622e696f2f6173736574732f526561646d652f636174616c616e312e706e67" width="22"&gt;&lt;/a&gt;
&lt;a href="https://github.com/firstcontributions/first-contributions/docs/translations/README.zh-cn.md" rel="noopener noreferrer"&gt;&lt;img title="中文 (Simplified)" alt="中文 (Simplified)" src="https://camo.githubusercontent.com/683fd8e893a7802d0d914f06806aab9ddec62ec7b5af4673c04aad313abf13c1/68747470733a2f2f63646e2e6a7364656c6976722e6e65742f67682f68616d707573626f72676f732f636f756e7472792d666c616773406d61696e2f7376672f636e2e737667" width="22"&gt;&lt;/a&gt;
&lt;a href="https://github.com/firstcontributions/first-contributions/docs/translations/README.cs.md" rel="noopener noreferrer"&gt;&lt;img title="Czech" alt="Czech" src="https://camo.githubusercontent.com/5d4ca0c30080ac2e2f3ac2c2cdaacafb225738354d0293232be40f5f3fdcc857/68747470733a2f2f63646e2e6a7364656c6976722e6e65742f67682f68616d707573626f72676f732f636f756e7472792d666c616773406d61696e2f7376672f637a2e737667" width="22"&gt;&lt;/a&gt;
&lt;a href="https://github.com/firstcontributions/first-contributions/docs/translations/README.de.md" rel="noopener noreferrer"&gt;&lt;img title="Deutsch" alt="Deutsch" src="https://camo.githubusercontent.com/bde98215dd7652ffd98ae6cb3f8485646a9c7e718dedff90fb54b8479ceb5ec8/68747470733a2f2f63646e2e6a7364656c6976722e6e65742f67682f68616d707573626f72676f732f636f756e7472792d666c616773406d61696e2f7376672f64652e737667" width="22"&gt;&lt;/a&gt;
&lt;a href="https://github.com/firstcontributions/first-contributions/docs/translations/README.da.md" rel="noopener noreferrer"&gt;&lt;img title="Dansk" alt="Dansk" src="https://camo.githubusercontent.com/3150a8eed259b9ab17381d073f208c206f62c3cf2beca52c2109f68da2aaf571/68747470733a2f2f63646e2e6a7364656c6976722e6e65742f67682f68616d707573626f72676f732f636f756e7472792d666c616773406d61696e2f7376672f646b2e737667" width="22"&gt;&lt;/a&gt;
&lt;a href="https://github.com/firstcontributions/first-contributions/docs/translations/README.eg.md" rel="noopener noreferrer"&gt;&lt;img title="المصرية" alt="المصرية" src="https://camo.githubusercontent.com/2f44ac233f82115cedd238c9d16166f449a228a7cb989f59ab8da361753538da/68747470733a2f2f63646e2e6a7364656c6976722e6e65742f67682f68616d707573626f72676f732f636f756e7472792d666c616773406d61696e2f7376672f65672e737667" width="22"&gt;&lt;/a&gt;
&lt;a href="https://github.com/firstcontributions/first-contributions/docs/translations/README.dz.md" rel="noopener noreferrer"&gt;&lt;img title="Dezéiriya" alt="Dezéiriya" src="https://camo.githubusercontent.com/300c0b3cf6a13f3405f1a455ba5cfee1d13b28af293e8de56dc7cb6301e2c2ec/68747470733a2f2f63646e2e6a7364656c6976722e6e65742f67682f68616d707573626f72676f732f636f756e7472792d666c616773406d61696e2f7376672f647a2e737667" width="22"&gt;&lt;/a&gt;
&lt;a href="https://github.com/firstcontributions/first-contributions/docs/translations/README.es.md" rel="noopener noreferrer"&gt;&lt;img title="Español de España" alt="Español de España" src="https://camo.githubusercontent.com/f3d0f3cb0e0961024aa50cb6c8a2044afda914a615eff62aba17788a20d5a774/68747470733a2f2f63646e2e6a7364656c6976722e6e65742f67682f68616d707573626f72676f732f636f756e7472792d666c616773406d61696e2f7376672f65732e737667" width="22"&gt;&lt;/a&gt;
&lt;a href="https://github.com/firstcontributions/first-contributions/docs/translations/README.fr.md" rel="noopener noreferrer"&gt;&lt;img title="Française" alt="Française" src="https://camo.githubusercontent.com/fd7f56e0f57bd4528e6fb9e5dcc36b783b447a247f03f5fe5e57ff18ddca8d55/68747470733a2f2f63646e2e6a7364656c6976722e6e65742f67682f68616d707573626f72676f732f636f756e7472792d666c616773406d61696e2f7376672f66722e737667" width="22"&gt;&lt;/a&gt;
&lt;a href="https://github.com/firstcontributions/first-contributions/docs/translations/README.ga.md" rel="noopener noreferrer"&gt;&lt;img title="Gaeilge" alt="Gaeilge" src="https://camo.githubusercontent.com/79c6128c5dc33978b4b00d04a7802c9839abd18768bf885d4107a4f062e54b18/68747470733a2f2f63646e2e6a7364656c6976722e6e65742f67682f68616d707573626f72676f732f636f756e7472792d666c616773406d61696e2f7376672f69652e737667" width="22"&gt;&lt;/a&gt;
&lt;a href="https://github.com/firstcontributions/first-contributions/docs/translations/README.gl.md" rel="noopener noreferrer"&gt;&lt;img title="Galego" alt="Galego" src="https://camo.githubusercontent.com/756f01769bd314988c67104c0b3fe98d2b38cdf519df7756cc08489933cbfdfc/68747470733a2f2f75706c6f61642e77696b696d656469612e6f72672f77696b6970656469612f636f6d6d6f6e732f7468756d622f362f36342f466c61675f6f665f47616c696369612e7376672f3132303070782d466c61675f6f665f47616c696369612e7376672e706e67" width="22"&gt;&lt;/a&gt;
&lt;a href="https://github.com/firstcontributions/first-contributions/docs/translations/README.gr.md" rel="noopener noreferrer"&gt;&lt;img title="Ελληνικά" alt="Ελληνικά" src="https://camo.githubusercontent.com/09fbcc211f6d3b52b7766beef860b780da96b9bf7cd3b0f8f447c0d85937e72f/68747470733a2f2f63646e2e6a7364656c6976722e6e65742f67682f68616d707573626f72676f732f636f756e7472792d666c616773406d61696e2f7376672f67722e737667" width="22"&gt;&lt;/a&gt;
&lt;a href="https://github.com/firstcontributions/first-contributions/docs/translations/README.ge.md" rel="noopener noreferrer"&gt;&lt;img title="ქართული" alt="ქართული" src="https://camo.githubusercontent.com/fcc56f34ca457a048542a3e0530a915c08b9a9b27ff54d81ea989e076e9b1c5f/68747470733a2f2f63646e2e6a7364656c6976722e6e65742f67682f68616d707573626f72676f732f636f756e7472792d666c616773406d61696e2f7376672f67652e737667" width="22"&gt;&lt;/a&gt;
&lt;a href="https://github.com/firstcontributions/first-contributions/docs/translations/README.hu.md" rel="noopener noreferrer"&gt;&lt;img title="Magyar" alt="Magyar" src="https://camo.githubusercontent.com/f8854f8237a722ab180a47688b1b759c20ae70d5f2a8cea9ea363b9177537d26/68747470733a2f2f63646e2e6a7364656c6976722e6e65742f67682f68616d707573626f72676f732f636f756e7472792d666c616773406d61696e2f7376672f68752e737667" width="22"&gt;&lt;/a&gt;
&lt;a href="https://github.com/firstcontributions/first-contributions/docs/translations/README.id.md" rel="noopener noreferrer"&gt;&lt;img title="Bahasa Indonesia" alt="Bahasa Indonesia" src="https://camo.githubusercontent.com/e032be171364a1c8d5ea162536387fe6d13fa1e3a3e28891a1e80336d4f21448/68747470733a2f2f63646e2e6a7364656c6976722e6e65742f67682f68616d707573626f72676f732f636f756e7472792d666c616773406d61696e2f7376672f69642e737667" width="22"&gt;&lt;/a&gt;
&lt;a href="https://github.com/firstcontributions/first-contributions/docs/translations/README.hb.md" rel="noopener noreferrer"&gt;&lt;img title="עִברִית" alt="עִברִית" src="https://camo.githubusercontent.com/d50bfe4e529a6254ae68afbbb5e9cbaad3532b99762f4a59e847dc0b3a0efcee/68747470733a2f2f63646e2e6a7364656c6976722e6e65742f67682f68616d707573626f72676f732f636f756e7472792d666c616773406d61696e2f7376672f696c2e737667" width="22"&gt;&lt;/a&gt;
&lt;a href="https://github.com/firstcontributions/first-contributions/docs/translations/Translations.md" rel="noopener noreferrer"&gt;&lt;img title="ગુજરાતી / हिन्दी / मराठी / മലയാളം / ಕನ್ನಡ / తెలుగు / ଓଡିଆ / छत्तीसगढ़ी / ਪੰਜਾਬੀ" alt="ગુજરાતી / हिन्दी / मराठी / മലയാളം / ಕನ್ನಡ / తెలుగు / ଓଡିଆ / छत्तीसगढ़ी / ਪੰਜਾਬੀ" src="https://camo.githubusercontent.com/bc26a8a20bf58f42271f7af2a46750125afc787414b9ced910894ac53849cb1a/68747470733a2f2f63646e2e6a7364656c6976722e6e65742f67682f68616d707573626f72676f732f636f756e7472792d666c616773406d61696e2f7376672f696e2e737667" width="22"&gt;&lt;/a&gt;
&lt;a href="https://github.com/firstcontributions/first-contributions/docs/translations/README.ta.md" rel="noopener noreferrer"&gt;&lt;img title="தமிழ்" alt="தமிழ்" src="https://camo.githubusercontent.com/6bbc161621e1f0370437ab5729ad826c9e432cb0371587e964316e9fe79b930a/68747470733a2f2f63646e2e6a7364656c6976722e6e65742f67682f68616d707573626f72676f732f636f756e7472792d666c616773406d61696e2f7376672f6c6b2e737667" width="22"&gt;&lt;/a&gt;
&lt;a href="https://github.com/firstcontributions/first-contributions/docs/translations/README.fa.md" rel="noopener noreferrer"&gt;&lt;img title="فارسی" alt="فارسی" src="https://camo.githubusercontent.com/99a911cbe91576591b9d11bec6db813df1e1ad5225727f91f5aff97ddb5a9481/68747470733a2f2f75706c6f61642e77696b696d656469612e6f72672f77696b6970656469612f636f6d6d6f6e732f622f62612f466c61675f6f665f4972616e5f6265666f72655f313937395f5265766f6c7574696f6e2e737667" width="22"&gt;&lt;/a&gt;
&lt;a href="https://github.com/firstcontributions/first-contributions/docs/translations/README.it.md" rel="noopener noreferrer"&gt;&lt;img title="Italiano" alt="Italiano" src="https://camo.githubusercontent.com/2bb93c6b2acd29447af05f283c8c5431a0bca0f82b41a85c92b646d887f44cf8/68747470733a2f2f63646e2e6a7364656c6976722e6e65742f67682f68616d707573626f72676f732f636f756e7472792d666c616773406d61696e2f7376672f69742e737667" width="22"&gt;&lt;/a&gt;
&lt;a href="https://github.com/firstcontributions/first-contributions/docs/translations/README.ja.md" rel="noopener noreferrer"&gt;&lt;img title="日本語" alt="日本語" src="https://camo.githubusercontent.com/2992085d4352f50bea55640d051d41c27c7bf3eccd61b81e3ed47fc1ab2f63a5/68747470733a2f2f63646e2e6a7364656c6976722e6e65742f67682f68616d707573626f72676f732f636f756e7472792d666c616773406d61696e2f7376672f6a702e737667" width="22"&gt;&lt;/a&gt;
&lt;a href="https://github.com/firstcontributions/first-contributions/docs/translations/README.si.md" rel="noopener noreferrer"&gt;&lt;img title="සිංහල" alt="සිංහල" src="https://camo.githubusercontent.com/6bbc161621e1f0370437ab5729ad826c9e432cb0371587e964316e9fe79b930a/68747470733a2f2f63646e2e6a7364656c6976722e6e65742f67682f68616d707573626f72676f732f636f756e7472792d666c616773406d61696e2f7376672f6c6b2e737667" width="22"&gt;&lt;/a&gt;
&lt;a href="https://github.com/firstcontributions/first-contributions/docs/translations/README.kws.md" rel="noopener noreferrer"&gt;&lt;img title="Kiswahili (Kenya)" alt="Kiswahili (Kenya)" src="https://camo.githubusercontent.com/cab3a174edd012f9a3d7cad32ceb09501c3fbcc10ba6e4f80e0956873a31112f/68747470733a2f2f63646e2e6a7364656c6976722e6e65742f67682f68616d707573626f72676f732f636f756e7472792d666c616773406d61696e2f7376672f6b652e737667" width="22"&gt;&lt;/a&gt;
&lt;a href="https://github.com/firstcontributions/first-contributions/docs/translations/README.ko.md" rel="noopener noreferrer"&gt;&lt;img title="한국어" alt="한국어" src="https://camo.githubusercontent.com/b6b2400f7e9a7662256d967e51865e926accadc21724a22ee2de07d3fc82fac0/68747470733a2f2f63646e2e6a7364656c6976722e6e65742f67682f68616d707573626f72676f732f636f756e7472792d666c616773406d61696e2f7376672f6b722e737667" width="22"&gt;&lt;/a&gt;
&lt;a href="https://github.com/firstcontributions/first-contributions/docs/translations/README.lt.md" rel="noopener noreferrer"&gt;&lt;img title="Lietuvių kalba" alt="Lietuvių kalba" src="https://camo.githubusercontent.com/7a319bb1ef9edf44c26acabd34699bd2fb6338ca37b248fba4c73181a09ad5fb/68747470733a2f2f63646e2e6a7364656c6976722e6e65742f67682f68616d707573626f72676f732f636f756e7472792d666c616773406d61696e2f7376672f6c742e737667" width="22"&gt;&lt;/a&gt;
&lt;a href="https://github.com/firstcontributions/first-contributions/docs/translations/README.ro.md" rel="noopener noreferrer"&gt;&lt;img title="Limba Română" alt="Limba Română" src="https://camo.githubusercontent.com/c35d62b477bf529efcfb8cb2a43c416d2be2ff1fdffb29f551f92542d989a400/68747470733a2f2f63646e2e6a7364656c6976722e6e65742f67682f68616d707573626f72676f732f636f756e7472792d666c616773406d61696e2f7376672f6d642e737667" width="22"&gt; &lt;img title="Limba Română" alt="Limba Română" src="https://camo.githubusercontent.com/c9e54c0ea1820248729e177d7954c70f51c4d6b2871d814f1cd34d5b4d147ea9/68747470733a2f2f63646e2e6a7364656c6976722e6e65742f67682f68616d707573626f72676f732f636f756e7472792d666c616773406d61696e2f7376672f726f2e737667" width="22"&gt;&lt;/a&gt;
&lt;a href="https://github.com/firstcontributions/first-contributions/docs/translations/README.mm_unicode.md" rel="noopener noreferrer"&gt;&lt;img title="မြန်မာ" alt="မြန်မာ" src="https://camo.githubusercontent.com/51712d00ef73bfea86c689f980b4054140261d94d74e4fd0a0674d2465ef7655/68747470733a2f2f63646e2e6a7364656c6976722e6e65742f67682f68616d707573626f72676f732f636f756e7472792d666c616773406d61696e2f7376672f6d6d2e737667" width="22"&gt;&lt;/a&gt;
&lt;a href="https://github.com/firstcontributions/first-contributions/docs/translations/README.mk.md" rel="noopener noreferrer"&gt;&lt;img title="Македонски" alt="Македонски" src="https://camo.githubusercontent.com/08f938a5007e9edb4ce5893f630003e71341af62458048248bad4ef799d13870/68747470733a2f2f63646e2e6a7364656c6976722e6e65742f67682f68616d707573626f72676f732f636f756e7472792d666c616773406d61696e2f7376672f6d6b2e737667" width="22"&gt;&lt;/a&gt;
&lt;a href="https://github.com/firstcontributions/first-contributions/docs/translations/README.mx.md" rel="noopener noreferrer"&gt;&lt;img title="Español de México" alt="Español de México" src="https://camo.githubusercontent.com/69f39b8bfeb33b754931135d99a81d64aa9273633800ca9c99b9407609832fb1/68747470733a2f2f63646e2e6a7364656c6976722e6e65742f67682f68616d707573626f72676f732f636f756e7472792d666c616773406d61696e2f7376672f6d782e737667" width="22"&gt;&lt;/a&gt;
&lt;a href="https://github.com/firstcontributions/first-contributions/docs/translations/README.my.md" rel="noopener noreferrer"&gt;&lt;img title="Bahasa Melayu / بهاس ملايو‎ / Malay" alt="Bahasa Melayu / بهاس ملايو‎ / Malay" src="https://camo.githubusercontent.com/da28668eb5bba443a31bf5f68e0e050b2e56f75445daf2a49317e862894f8c74/68747470733a2f2f63646e2e6a7364656c6976722e6e65742f67682f68616d707573626f72676f732f636f756e7472792d666c616773406d61696e2f7376672f6d792e737667" width="22"&gt;&lt;/a&gt;
&lt;a href="https://github.com/firstcontributions/first-contributions/docs/translations/README.nl.md" rel="noopener noreferrer"&gt;&lt;img title="Dutch" alt="Dutch" src="https://camo.githubusercontent.com/12cedefd727d57ca4807a73307d75ec1b03d5d17a89e554c211caaeebcf3e11a/68747470733a2f2f63646e2e6a7364656c6976722e6e65742f67682f68616d707573626f72676f732f636f756e7472792d666c616773406d61696e2f7376672f6e6c2e737667" width="22"&gt;&lt;/a&gt;
&lt;a href="https://github.com/firstcontributions/first-contributions/docs/translations/README.no.md" rel="noopener noreferrer"&gt;&lt;img title="Norsk" alt="Norsk" src="https://camo.githubusercontent.com/be60dc2fd08aa3792534fae2c03a0636d52fa9cbdc68af541de49d488c34c4af/68747470733a2f2f63646e2e6a7364656c6976722e6e65742f67682f68616d707573626f72676f732f636f756e7472792d666c616773406d61696e2f7376672f6e6f2e737667" width="22"&gt;&lt;/a&gt;
&lt;a href="https://github.com/firstcontributions/first-contributions/docs/translations/README.np.md" rel="noopener noreferrer"&gt;&lt;img title="नेपाली" alt="नेपाली" src="https://camo.githubusercontent.com/46f719e1fa2c8bc781265ac8067879e1dc663906be5f04a65530e6f30d63b114/68747470733a2f2f63646e2e6a7364656c6976722e6e65742f67682f68616d707573626f72676f732f636f756e7472792d666c616773406d61696e2f7376672f6e702e737667" width="15"&gt;&lt;/a&gt;
&lt;a href="https://github.com/firstcontributions/first-contributions/docs/translations/README.fil.md" rel="noopener noreferrer"&gt;&lt;img title="Wikang Filipino" alt="Wikang Filipino" src="https://camo.githubusercontent.com/7e82d44a307de07ef8ae46903f17a9ae3fbefce1c4154f47234f412468ee7110/68747470733a2f2f63646e2e6a7364656c6976722e6e65742f67682f68616d707573626f72676f732f636f756e7472792d666c616773406d61696e2f7376672f70682e737667" width="22"&gt;&lt;/a&gt;
&lt;a href="https://github.com/firstcontributions/first-contributions/docs/translations/README.en-pirate.md" rel="noopener noreferrer"&gt;&lt;img title="English (Pirate)" alt="English (Pirate)" src="https://camo.githubusercontent.com/ee6fbe2aed964d2e10f384ef254c4c4da0542e98d0c00b0821d40836647fe1eb/68747470733a2f2f6669727374636f6e747269627574696f6e732e6769746875622e696f2f6173736574732f526561646d652f7069726174652e706e67" width="22"&gt;&lt;/a&gt;
&lt;a href="https://github.com/firstcontributions/first-contributions/docs/translations/README.ur.md" rel="noopener noreferrer"&gt;&lt;img title="اُاردو" alt="اردو" src="https://camo.githubusercontent.com/67398d65ad31711f5f3a4821c6af8e9d67a9cbbbd12098b59ef5e70727eb5258/68747470733a2f2f63646e2e6a7364656c6976722e6e65742f67682f68616d707573626f72676f732f636f756e7472792d666c616773406d61696e2f7376672f706b2e737667" width="22"&gt;&lt;/a&gt;
&lt;a href="https://github.com/firstcontributions/first-contributions/docs/translations/README.gh.md" rel="noopener noreferrer"&gt;&lt;img title="Twi (Ghana)" alt="Twi (Ghana)" src="https://camo.githubusercontent.com/cf1a815f6c161ceffb457bd47ec9a87f08acf4408b9f96b607593ffcba594232/68747470733a2f2f63646e2e6a7364656c6976722e6e65742f67682f68616d707573626f72676f732f636f756e7472792d666c616773406d61696e2f7376672f67682e737667" width="22"&gt;&lt;/a&gt;
&lt;a href="https://github.com/firstcontributions/first-contributions/docs/translations/README.pl.md" rel="noopener noreferrer"&gt;&lt;img title="Polski" alt="Polski" src="https://camo.githubusercontent.com/b7fd97b582d080c63f62db2b47b1edefd584356a0a403dde96576e679fcd8d5e/68747470733a2f2f63646e2e6a7364656c6976722e6e65742f67682f68616d707573626f72676f732f636f756e7472792d666c616773406d61696e2f7376672f706c2e737667" width="22"&gt;&lt;/a&gt;
&lt;a href="https://github.com/firstcontributions/first-contributions/docs/translations/README.pt-pt.md" rel="noopener noreferrer"&gt;&lt;img title="Português (Portugal)" alt="Português (Portugal)" src="https://camo.githubusercontent.com/249fb78bbb030a1975564d683d4011ff0bd99fe5d1af2f9fc4a3e0cd3ee37cdb/68747470733a2f2f63646e2e6a7364656c6976722e6e65742f67682f68616d707573626f72676f732f636f756e7472792d666c616773406d61696e2f7376672f70742e737667" width="22"&gt;&lt;/a&gt;
&lt;a href="https://github.com/firstcontributions/first-contributions/docs/translations/README.ru.md" rel="noopener noreferrer"&gt;&lt;img title="Русский язык" alt="Русский язык" src="https://camo.githubusercontent.com/b791dbd5d5a7a4e1e7b549af25123d7b1b63c9cd119ca32bec095b0cffb763b5/68747470733a2f2f63646e2e6a7364656c6976722e6e65742f67682f68616d707573626f72676f732f636f756e7472792d666c616773406d61696e2f7376672f72752e737667" width="22"&gt;&lt;/a&gt;
&lt;a href="https://github.com/firstcontributions/first-contributions/docs/translations/README.ar.md" rel="noopener noreferrer"&gt;&lt;img title="العربية" alt="العربية" src="https://camo.githubusercontent.com/0ceb2fb8ddd1aad379288c0ee175f45b9ad9a32edc4fbc932647d15e3b99afc2/68747470733a2f2f63646e2e6a7364656c6976722e6e65742f67682f68616d707573626f72676f732f636f756e7472792d666c616773406d61696e2f7376672f73612e737667" width="22"&gt;&lt;/a&gt;
&lt;a href="https://github.com/firstcontributions/first-contributions/docs/translations/README.se.md" rel="noopener noreferrer"&gt;&lt;img title="Svenska" alt="Svenska" src="https://camo.githubusercontent.com/7420aecf00b47ebda56dadfdbfe42fb0ea8103fdbab250d7f50f5cbba619a510/68747470733a2f2f63646e2e6a7364656c6976722e6e65742f67682f68616d707573626f72676f732f636f756e7472792d666c616773406d61696e2f7376672f73652e737667" width="22"&gt;&lt;/a&gt;
&lt;a href="https://github.com/firstcontributions/first-contributions/docs/translations/README.slk.md" rel="noopener noreferrer"&gt;&lt;img title="Slovenčina" alt="Slovenčina" src="https://camo.githubusercontent.com/f4ed736e3555f498de348334c30d711b9154a4482903bacfc88ab59def51d725/68747470733a2f2f63646e2e6a7364656c6976722e6e65742f67682f68616d707573626f72676f732f636f756e7472792d666c616773406d61696e2f7376672f736b2e737667" width="22"&gt;&lt;/a&gt;
&lt;a href="https://github.com/firstcontributions/first-contributions/docs/translations/README.sl.md" rel="noopener noreferrer"&gt;&lt;img title="Slovenščina" alt="Slovenščina" src="https://camo.githubusercontent.com/2362945e0b852d514851bdb3dd31d44217b83c573b27183e2dada48904d077d9/68747470733a2f2f63646e2e6a7364656c6976722e6e65742f67682f68616d707573626f72676f732f636f756e7472792d666c616773406d61696e2f7376672f73692e737667" width="22"&gt;&lt;/a&gt;
&lt;a href="https://github.com/firstcontributions/first-contributions/docs/translations/README.th.md" rel="noopener noreferrer"&gt;&lt;img title="ภาษาไทย" alt="ภาษาไทย" src="https://camo.githubusercontent.com/50e214a9363b6897fc5de9efad46873fdccb5876a3adcaf4bb52007f7f245825/68747470733a2f2f63646e2e6a7364656c6976722e6e65742f67682f68616d707573626f72676f732f636f756e7472792d666c616773406d61696e2f7376672f74682e737667" width="22"&gt;&lt;/a&gt;
&lt;a href="https://github.com/firstcontributions/first-contributions/docs/translations/README.tr.md" rel="noopener noreferrer"&gt;&lt;img title="Türkçe" alt="Türkçe" src="https://camo.githubusercontent.com/5369246396e27badd6c3df2a22decbefafe44f43162d9cc59f673f549d2a8478/68747470733a2f2f63646e2e6a7364656c6976722e6e65742f67682f68616d707573626f72676f732f636f756e7472792d666c616773406d61696e2f7376672f74722e737667" width="22"&gt;&lt;/a&gt;
&lt;a href="https://github.com/firstcontributions/first-contributions/docs/translations/README.zh-tw.md" rel="noopener noreferrer"&gt;&lt;img title="中文(Traditional)" alt="中文(Traditional)" src="https://camo.githubusercontent.com/8fa2bf760102cc340adc94cfb74f5f6825fd28486aa25d4c40dff51a17bdf318/68747470733a2f2f63646e2e6a7364656c6976722e6e65742f67682f68616d707573626f72676f732f636f756e7472792d666c616773406d61696e2f7376672f74772e737667" width="22"&gt;&lt;/a&gt;
&lt;a href="https://github.com/firstcontributions/first-contributions/docs/translations/README.ua.md" rel="noopener noreferrer"&gt;&lt;img title="Українська" alt="Українська" src="https://camo.githubusercontent.com/3139c06a768042b5b63fd069e941fd4b9ea870ff086f2fefe563cefaf064a625/68747470733a2f2f63646e2e6a7364656c6976722e6e65742f67682f68616d707573626f72676f732f636f756e7472792d666c616773406d61696e2f7376672f75612e737667" width="22"&gt;&lt;/a&gt;
&lt;a href="https://github.com/firstcontributions/first-contributions/docs/translations/README.vn.md" rel="noopener noreferrer"&gt;&lt;img title="Tiếng Việt" alt="Tiếng Việt" src="https://camo.githubusercontent.com/2d6486038bba19ba3d6fce1223902f642ef54bd9e9a98b5488631c6af3b19596/68747470733a2f2f63646e2e6a7364656c6976722e6e65742f67682f68616d707573626f72676f732f636f756e7472792d666c616773406d61696e2f7376672f766e2e737667" width="22"&gt;&lt;/a&gt;
&lt;a href="https://github.com/firstcontributions/first-contributions/docs/translations/README.sw.md" rel="noopener noreferrer"&gt;&lt;img title="Tanzania" alt="Swahili language" src="https://camo.githubusercontent.com/5c4af96dfa96759034524e65e001e36c6974579664ea2cacd006223ad145da62/68747470733a2f2f63646e2e6a7364656c6976722e6e65742f67682f68616d707573626f72676f732f636f756e7472792d666c616773406d61696e2f7376672f747a2e737667" width="22"&gt;&lt;/a&gt;
&lt;a href="https://github.com/firstcontributions/first-contributions/docs/translations/README.zul.md" rel="noopener noreferrer"&gt;&lt;img title="Zulu (South Africa)" alt="Zulu (South Africa)" src="https://camo.githubusercontent.com/378df3e897f8a20929808dc20703b0733a4f3763b908393131a82ff9942bf107/68747470733a2f2f63646e2e6a7364656c6976722e6e65742f67682f68616d707573626f72676f732f636f756e7472792d666c616773406d61696e2f7376672f7a612e737667" width="22"&gt;&lt;/a&gt;
&lt;a href="https://github.com/firstcontributions/first-contributions/docs/translations/README.afk.md" rel="noopener noreferrer"&gt;&lt;img title="Afrikaans (South Africa)" alt="Afrikaans (South Africa)" src="https://camo.githubusercontent.com/378df3e897f8a20929808dc20703b0733a4f3763b908393131a82ff9942bf107/68747470733a2f2f63646e2e6a7364656c6976722e6e65742f67682f68616d707573626f72676f732f636f756e7472792d666c616773406d61696e2f7376672f7a612e737667" width="22"&gt;&lt;/a&gt;
&lt;a href="https://github.com/firstcontributions/first-contributions/docs/translations/README.igb.md" rel="noopener noreferrer"&gt;&lt;img title="Igbo (Nigeria)" alt="Igbo (Nigeria)" src="https://camo.githubusercontent.com/032745a87ce7fbb0986220eb4cca18e40fa0aa239bcc1b4eebe86fdaafee0e45/68747470733a2f2f63646e2e6a7364656c6976722e6e65742f67682f68616d707573626f72676f732f636f756e7472792d666c616773406d61696e2f7376672f6e672e737667" width="22"&gt;&lt;/a&gt;
&lt;a href="https://github.com/firstcontributions/first-contributions/docs/translations/README.mli.md" rel="noopener noreferrer"&gt;&lt;img title="Bambara (Mali)" alt="Bambara (Mali)" src="https://camo.githubusercontent.com/caff2d78fa318b5adcef2e6591e41b1d46bfed72c2d009fc9923cd40f912ff7b/68747470733a2f2f63646e2e6a7364656c6976722e6e65742f67682f68616d707573626f72676f732f636f756e7472792d666c616773406d61696e2f7376672f6d6c2e737667" width="22"&gt;&lt;/a&gt;
&lt;a href="https://github.com/firstcontributions/first-contributions/docs/translations/README.hau.md" rel="noopener noreferrer"&gt;&lt;img title="Hausa (Nigeria)" alt="Hausa (Nigeria)" src="https://camo.githubusercontent.com/600a17fd566b4d1c38faf452121f2c25430ff924e2366782a5ef71cbdf90d34b/68747470733a2f2f75706c6f61642e77696b696d656469612e6f72672f77696b6970656469612f636f6d6d6f6e732f7468756d622f352f35642f466c61675f6f665f7468655f48617573615f70656f706c652e7376672f3132383070782d466c61675f6f665f7468655f48617573615f70656f706c652e7376672e706e67" width="22"&gt;&lt;/a&gt;
&lt;a href="https://github.com/firstcontributions/first-contributions/docs/translations/README.yor.md" rel="noopener noreferrer"&gt;&lt;img title="Yoruba (Nigeria)" alt="Yoruba (Nigeria)" src="https://camo.githubusercontent.com/eddb6300b31428bf24985407c480a3a0cb2ececa6f747cde99334921c725ed05/68747470733a2f2f7777772e666f74772e696e666f2f696d616765732f6e2f6e67253744656f796f722e676966" width="22"&gt;&lt;/a&gt;
&lt;a href="https://github.com/firstcontributions/first-contributions/docs/translations/README.lv.md" rel="noopener noreferrer"&gt;&lt;img title="Latvia" alt="Latvia" src="https://camo.githubusercontent.com/ab9ebc9483506b0a8ca019b6f2c5c6c0ac6b65db54d21a8d6eb53d76e6f43b48/68747470733a2f2f63646e2e6a7364656c6976722e6e65742f67682f68616d707573626f72676f732f636f756e7472792d666c616773406d61696e2f7376672f6c762e737667" width="22"&gt;&lt;/a&gt;
&lt;a href="https://github.com/firstcontributions/first-contributions/docs/translations/README.fi.md" rel="noopener noreferrer"&gt;&lt;img title="Suomeksi" alt="Suomeksi" src="https://camo.githubusercontent.com/a378d8f42665b8feaafa822f188b1358a3a88f56d2b3e3a7c1a7dc766dd953c8/68747470733a2f2f63646e2e6a7364656c6976722e6e65742f67682f68616d707573626f72676f732f636f756e7472792d666c616773406d61696e2f7376672f66692e737667" width="22"&gt;&lt;/a&gt;
&lt;a href="https://github.com/firstcontributions/first-contributions/docs/translations/README.by.md" rel="noopener noreferrer"&gt;&lt;img title="Беларуская мова" alt="Беларуская мова" src="https://camo.githubusercontent.com/7d55447d6c2ec6c5a74a98a1dec240d43e6e1321710e5a8f5d8652079bb78859/68747470733a2f2f63646e2e6a7364656c6976722e6e65742f67682f68616d707573626f72676f732f636f756e7472792d666c616773406d61696e2f7376672f62792e737667" width="22"&gt;&lt;/a&gt;
&lt;a href="https://github.com/firstcontributions/first-contributions/docs/translations/README.sr-Cyrl.md" rel="noopener noreferrer"&gt;&lt;img title="Српски" alt="Српски" src="https://camo.githubusercontent.com/019026dd261a446e74c76df66d04a018b907336ea8e9eaaa1e2ec43e0bbbc5ca/68747470733a2f2f63646e2e6a7364656c6976722e6e65742f67682f68616d707573626f72676f732f636f756e7472792d666c616773406d61696e2f7376672f72732e737667" width="22"&gt;&lt;/a&gt;
&lt;a href="https://github.com/firstcontributions/first-contributions/docs/translations/README.sr-Latn.md" rel="noopener noreferrer"&gt;&lt;img title="Srpski" alt="Srpski" src="https://camo.githubusercontent.com/019026dd261a446e74c76df66d04a018b907336ea8e9eaaa1e2ec43e0bbbc5ca/68747470733a2f2f63646e2e6a7364656c6976722e6e65742f67682f68616d707573626f72676f732f636f756e7472792d666c616773406d61696e2f7376672f72732e737667" width="22"&gt;&lt;/a&gt;
&lt;a href="https://github.com/firstcontributions/first-contributions/docs/translations/README.kz.md" rel="noopener noreferrer"&gt;&lt;img title="Қазақша" alt="Қазақша" src="https://camo.githubusercontent.com/22181e81dc32c10df0fdf7a320e428dcd29f998a1bd8e42564b74cb8cb7ded56/68747470733a2f2f63646e2e6a7364656c6976722e6e65742f67682f68616d707573626f72676f732f636f756e7472792d666c616773406d61696e2f7376672f6b7a2e737667" width="22"&gt;&lt;/a&gt;
&lt;a href="https://github.com/firstcontributions/first-contributions/docs/translations/README.bih.md" rel="noopener noreferrer"&gt;&lt;img title="Bosanski" alt="Bosanski" src="https://camo.githubusercontent.com/0081631258b4f1af43a7d8c55b9dad202ab147461275f724097bda1b0dc73bff/68747470733a2f2f63646e2e6a7364656c6976722e6e65742f67682f68616d707573626f72676f732f636f756e7472792d666c616773406d61696e2f7376672f62612e737667" width="22"&gt;&lt;/a&gt;
&lt;a href="https://github.com/firstcontributions/first-contributions/docs/translations/README.hr.md" rel="noopener noreferrer"&gt;&lt;img title="Hrvatski" alt="Hrvatski" src="https://camo.githubusercontent.com/59bea781bddfa77276b0671289aa668b3341f675d185c05d4046ab2ef58c8d17/68747470733a2f2f63646e2e6a7364656c6976722e6e65742f67682f68616d707573626f72676f732f636f756e7472792d666c616773406d61696e2f7376672f68722e737667" width="22"&gt;&lt;/a&gt;
&lt;a href="https://github.com/firstcontributions/first-contributions/docs/translations/README.ps.md" rel="noopener noreferrer"&gt;&lt;img title="پښتو" alt="پښتو" src="https://camo.githubusercontent.com/520622d50ff1a01eab2d62bd95e6ac8e0b07238daefa485d5dca5c891c729328/68747470733a2f2f63646e2e6a7364656c6976722e6e65742f67682f68616d707573626f72676f732f636f756e7472792d666c616773406d61696e2f7376672f61662e737667" width="22"&gt;&lt;/a&gt;
&lt;a href="https://github.com/firstcontributions/first-contributions/docs/translations/README.so.md" rel="noopener noreferrer"&gt;&lt;img title="Af-soomaali" alt="Somalia" src="https://camo.githubusercontent.com/86b2d61710892c2ee994025202cc179b7d37e9b974753287eabb3f57ac5d5323/68747470733a2f2f63646e2e6a7364656c6976722e6e65742f67682f68616d707573626f72676f732f636f756e7472792d666c616773406d61696e2f7376672f736f2e737667" width="22"&gt;&lt;/a&gt;
&lt;a href="https://github.com/firstcontributions/first-contributions/docs/translations/README.ec.md" rel="noopener noreferrer"&gt;&lt;img title="Español de Ecuador" alt="Ecuador" src="https://camo.githubusercontent.com/c937d3e6223433c22638ec96ba1421e29a159ffcfe38c3993fcb5f2b975d3b2b/68747470733a2f2f63646e2e6a7364656c6976722e6e65742f67682f68616d707573626f72676f732f636f756e7472792d666c616773406d61696e2f7376672f65632e737667" width="22"&gt;&lt;/a&gt;
&lt;a href="https://github.com/firstcontributions/first-contributions/docs/translations/README.lug.md" rel="noopener noreferrer"&gt;&lt;img title="Luganda (Uganda)" alt="Luganda (Uganda)" src="https://camo.githubusercontent.com/9d43de5c6e2bdab413248dc996be02535f17628d57ad92ae4b6946cb0ed8a632/68747470733a2f2f63646e2e6a7364656c6976722e6e65742f67682f68616d707573626f72676f732f636f756e7472792d666c616773406d61696e2f7376672f75672e737667" width="22"&gt;&lt;/a&gt;
&lt;a href="https://github.com/firstcontributions/first-contributions/docs/translations/README.tm.md" rel="noopener noreferrer"&gt;&lt;img title="Turkmen" alt="Turkmen language" src="https://camo.githubusercontent.com/3a409d962ef1afd6401ccf25733a7c7b0a850220edee98ac153e23e24ad15d66/68747470733a2f2f63646e2e6a7364656c6976722e6e65742f67682f68616d707573626f72676f732f636f756e7472792d666c616773406d61696e2f7376672f746d2e737667" width="22"&gt;&lt;/a&gt;
&lt;a href="https://github.com/firstcontributions/first-contributions/docs/translations/README.ewe.md" rel="noopener noreferrer"&gt;&lt;img title="Ewe (TOGO)" alt="Ewe (TOGO)" src="https://camo.githubusercontent.com/fc29d86db7b4776e41d0b51319f719a2a6dbbfdc981ae8638d974c876c7b90b4/68747470733a2f2f63646e2e6a7364656c6976722e6e65742f67682f68616d707573626f72676f732f636f756e7472792d666c616773406d61696e2f7376672f74672e737667" width="22"&gt;&lt;/a&gt;
&lt;a href="https://github.com/firstcontributions/first-contributions/docs/translations/README.am.md" rel="noopener noreferrer"&gt;&lt;img title="አማርኛ" alt="አማርኛ" src="https://camo.githubusercontent.com/eb0cd3b8f161e7c63caf0ae609ac72f9642a2849a5b123e6fc59b1a12997546f/68747470733a2f2f63646e2e6a7364656c6976722e6e65742f67682f68616d707573626f72676f732f636f756e7472792d666c616773406d61696e2f7376672f65742e737667" width="22"&gt;&lt;/a&gt;
&lt;a href="https://github.com/firstcontributions/first-contributions/docs/translations/README.kr.md" rel="noopener noreferrer"&gt;&lt;img title="Kurdî" alt="Kurdî" src="https://camo.githubusercontent.com/4eabc848566a54d3507e244c88172b445d84e1bb0610209321ffe472f5c9b468/68747470733a2f2f75706c6f61642e77696b696d656469612e6f72672f77696b6970656469612f636f6d6d6f6e732f332f33352f466c61675f6f665f4b757264697374616e2e737667" width="22"&gt;&lt;/a&gt;
&lt;a href="https://github.com/firstcontributions/first-contributions/docs/translations/README.mg.md" rel="noopener noreferrer"&gt;&lt;img title="Malagasy" alt="Malagasy" src="https://camo.githubusercontent.com/747bc4744270330fc41c01da07ca20cafa4a4e2040432f251633af0cf95ff6a8/68747470733a2f2f63646e2e6a7364656c6976722e6e65742f67682f68616d707573626f72676f732f636f756e7472792d666c616773406d61696e2f7376672f6d672e737667" width="22"&gt;&lt;/a&gt;
&lt;a href="https://github.com/firstcontributions/first-contributions/docs/translations/README.kh.md" rel="noopener noreferrer"&gt;&lt;img title="ភាសាខ្មែរ" alt="ភាសាខ្មែរ" src="https://camo.githubusercontent.com/50d7866dcf4dfb8dafb67330769e1878bfd0a4e3067581a728870b73abccb788/68747470733a2f2f63646e2e6a7364656c6976722e6e65742f67682f68616d707573626f72676f732f636f756e7472792d666c616773406d61696e2f7376672f6b682e737667" width="22"&gt;&lt;/a&gt;
&lt;a href="https://github.com/firstcontributions/first-contributions/docs/translations/README.ma.md" rel="noopener noreferrer"&gt;&lt;img title="Morocco" alt="Moroccan Darija" src="https://camo.githubusercontent.com/699540414f28db2a1bde9128ea41d1969771d4f302d1df3841371be5b31567e5/68747470733a2f2f63646e2e6a7364656c6976722e6e65742f67682f68616d707573626f72676f732f636f756e7472792d666c616773406d61696e2f7376672f6d612e737667" width="22"&gt;&lt;/a&gt;
&lt;a href="https://github.com/firstcontributions/first-contributions/docs/translations/README.mn.md" rel="noopener noreferrer"&gt;&lt;img title="Mongolian" alt="Mongolian" src="https://camo.githubusercontent.com/3187d4fc88af6ef713974b72a519ca7b03d155c7254bea530509e3b28180f878/68747470733a2f2f63646e2e6a7364656c6976722e6e65742f67682f68616d707573626f72676f732f636f756e7472792d666c616773406d61696e2f7376672f6d6e2e737667" width="22"&gt;&lt;/a&gt;
&lt;a href="https://github.com/firstcontributions/first-contributions/docs/translations/README.tn.md" rel="noopener noreferrer"&gt;&lt;img title="Tounsi" alt="Tounsi" src="https://camo.githubusercontent.com/c4812e9cf2575aa9aa57e5e6bb1551632c9bfa6c59a8bc090697797f1e8dc6ef/68747470733a2f2f63646e2e6a7364656c6976722e6e65742f67682f68616d707573626f72676f732f636f756e7472792d666c616773406d61696e2f7376672f746e2e737667" width="22"&gt;&lt;/a&gt;
&lt;a href="https://github.com/firstcontributions/first-contributions/docs/translations/README.ln.md" rel="noopener noreferrer"&gt;&lt;img title="Lingala" alt="Lingala" src="https://camo.githubusercontent.com/d33075b616dd130edcc703f976f27bba4c4ac01cc28dd56b4d9d29fc50699749/68747470733a2f2f63646e2e6a7364656c6976722e6e65742f67682f68616d707573626f72676f732f636f756e7472792d666c616773406d61696e2f7376672f63642e737667" width="22"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;div class="markdown-heading"&gt;
&lt;h1 class="heading-element"&gt;First Contributions&lt;/h1&gt;
&lt;/div&gt;
&lt;p&gt;This project aims to simplify and guide the way beginners make their first contribution. If you are looking to make your first contribution, follow the steps below.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;If you're not comfortable with command line, &lt;a href="https://github.com/firstcontributions/first-contributions#tutorials-using-other-tools" rel="noopener noreferrer"&gt;here are tutorials using GUI tools.&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;a rel="noopener noreferrer nofollow" href="https://camo.githubusercontent.com/42b18e612219cae827d8c4ee97bf15ec971f271fe60789e73a8aaeeeb42eb73f/68747470733a2f2f6669727374636f6e747269627574696f6e732e6769746875622e696f2f6173736574732f526561646d652f666f726b2e706e67"&gt;&lt;img width="300" src="https://camo.githubusercontent.com/42b18e612219cae827d8c4ee97bf15ec971f271fe60789e73a8aaeeeb42eb73f/68747470733a2f2f6669727374636f6e747269627574696f6e732e6769746875622e696f2f6173736574732f526561646d652f666f726b2e706e67" alt="fork the repository"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;div class="markdown-heading"&gt;
&lt;h4 class="heading-element"&gt;If you don't have git on your machine, &lt;a href="https://docs.github.com/en/get-started/quickstart/set-up-git" rel="noopener noreferrer"&gt;install it&lt;/a&gt;.&lt;/h4&gt;
&lt;/div&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Fork this repository&lt;/h2&gt;

&lt;/div&gt;
&lt;p&gt;Fork this repository by clicking on the fork button on the top of this page.
This will create a copy of this repository in your account.&lt;/p&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Clone the repository&lt;/h2&gt;

&lt;/div&gt;
&lt;p&gt;&lt;a rel="noopener noreferrer nofollow" href="https://camo.githubusercontent.com/d4bafe4b6b8db07be80cb5d74070c2fb8ec18559711ad85ab3ae2bc576e1e9bc/68747470733a2f2f6669727374636f6e747269627574696f6e732e6769746875622e696f2f6173736574732f526561646d652f636c6f6e652e706e67"&gt;&lt;img width="300" src="https://camo.githubusercontent.com/d4bafe4b6b8db07be80cb5d74070c2fb8ec18559711ad85ab3ae2bc576e1e9bc/68747470733a2f2f6669727374636f6e747269627574696f6e732e6769746875622e696f2f6173736574732f526561646d652f636c6f6e652e706e67" alt="clone the repository"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Now clone the forked repository to your machine. Go to your GitHub account, open the forked repository, click on the code button, then on SSH tab and then click the &lt;em&gt;copy url to clipboard&lt;/em&gt; icon.&lt;/p&gt;
&lt;p&gt;Open a terminal and run the following git command:&lt;/p&gt;
&lt;div class="highlight highlight-source-shell notranslate position-relative overflow-auto js-code-highlight"&gt;
&lt;pre&gt;git clone &lt;span class="pl-s"&gt;&lt;span class="pl-pds"&gt;"&lt;/span&gt;url you just copied&lt;span class="pl-pds"&gt;"&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;

&lt;/div&gt;
&lt;p&gt;where "url you just copied" (without the…&lt;/p&gt;&lt;/div&gt;
  &lt;/div&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/firstcontributions/first-contributions" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;


</description>
      <category>opensource</category>
      <category>beginners</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>How Microsoft Learn can help you grow your skills</title>
      <dc:creator>Muhammadh Ahzem </dc:creator>
      <pubDate>Mon, 04 Mar 2024 02:54:05 +0000</pubDate>
      <link>https://dev.to/ahzem/how-microsoft-learn-can-help-you-grow-your-skills-38m5</link>
      <guid>https://dev.to/ahzem/how-microsoft-learn-can-help-you-grow-your-skills-38m5</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%2Fvf9xn3q0h5q3oa5gp0lb.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fvf9xn3q0h5q3oa5gp0lb.jpeg" alt="Designed By Microsoft Designer" width="800" height="800"&gt;&lt;/a&gt;&lt;br&gt;
Do you want to learn new things and improve your career? Do you like Microsoft products and want to use them better? If you said yes, then you should check out Microsoft Learn.&lt;/p&gt;

&lt;p&gt;Microsoft Learn is a website that offers free training for Microsoft products and services. You can find courses, learning paths, and modules that teach you how to use Azure, Windows, Office, Dynamics, Power Apps, Teams, and more.&lt;/p&gt;

&lt;p&gt;You can learn by doing, with interactive exercises and quizzes that test your knowledge. You can also learn from an instructor, who can guide you through the topics and answer your questions.&lt;/p&gt;

&lt;p&gt;You can also earn certifications that show your skills to employers and peers. Microsoft certifications are recognized and respected around the world. They can help you get a promotion, a new job, or a higher salary.&lt;/p&gt;

&lt;p&gt;Microsoft Learn also has a community where you can connect with other learners and experts. You can ask and answer questions, share resources, and learn together. You can also find code samples, videos, and shows that inspire you to create and innovate with Microsoft technology.&lt;/p&gt;

&lt;p&gt;Microsoft Learn is for everyone, whether you are a beginner or an expert, a student or a professional, a developer or a business user. You can learn at your own pace, on your own schedule, and on any device.&lt;/p&gt;

&lt;p&gt;So what are you waiting for? Start your learning journey today with Microsoft Learn. Visit &lt;a href="https://learn.microsoft.com/en-us/?wt.mc_id=studentamb_294824" rel="noopener noreferrer"&gt;https://learn.microsoft.com/en-us/?wt.mc_id=studentamb_294824&lt;/a&gt; to explore all the possibilities. You will be amazed by how much you can learn and grow with Microsoft Learn.&lt;/p&gt;

</description>
      <category>microsoft</category>
      <category>microsoftlearn</category>
      <category>beginners</category>
      <category>opensource</category>
    </item>
    <item>
      <title>Placeholder Contributor</title>
      <dc:creator>Muhammadh Ahzem </dc:creator>
      <pubDate>Fri, 27 Oct 2023 01:56:21 +0000</pubDate>
      <link>https://dev.to/ahzem/placeholder-contributor-40gb</link>
      <guid>https://dev.to/ahzem/placeholder-contributor-40gb</guid>
      <description>&lt;h3&gt;
  
  
  Intro
&lt;/h3&gt;

&lt;p&gt;I'm Ahzem, a passionate undergraduate student studying Information Technology at the Institute of Technology, University of Moratuwa, in Bandarawela, Sri Lanka. Although I'm not fluent in English, I'm committed to learning and improving my skills.&lt;/p&gt;

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

&lt;p&gt;This was my first Hacktoberfest, and it was quite a journey. Some of my biggest accomplishments during this month included making my first four valid pull requests. It was a true light-bulb moment when I realized how my contributions could make a difference in open-source projects. I faced some challenges along the way, encountering problems that seemed impossible to fix. However, I adapted by seeking guidance from the community and learning from others' code. It was a valuable learning experience.&lt;/p&gt;

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

&lt;p&gt;Before Hacktoberfest 2023, my skillset in open-source contributions was limited. However, during this event, I improved my coding skills and gained a better understanding of version control systems, such as Git. These newfound skills have not only enhanced my learning but have also opened up new possibilities for my career goals. I'm now more confident in contributing to open-source projects and have set new goals to continue this journey.&lt;/p&gt;

</description>
      <category>hack23contributor</category>
    </item>
    <item>
      <title>Placeholder Contributor</title>
      <dc:creator>Muhammadh Ahzem </dc:creator>
      <pubDate>Thu, 19 Oct 2023 01:12:21 +0000</pubDate>
      <link>https://dev.to/ahzem/placeholder-contributor-29fn</link>
      <guid>https://dev.to/ahzem/placeholder-contributor-29fn</guid>
      <description>&lt;h3&gt;
  
  
  Intro
&lt;/h3&gt;

&lt;p&gt;Hey everyone! 🌟 This is Ahzem, and I'm excited to share my very first Hacktoberfest journey with you all. This year has been an incredible learning experience. You can check out my GitHub profile &lt;a href="https://github.com/ahzem" rel="noopener noreferrer"&gt;here&lt;/a&gt;.&lt;/p&gt;

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

&lt;p&gt;As a first-time participant, I've had some remarkable highs and a few challenging lows. Making my first meaningful contributions to open-source projects felt like a major accomplishment. However, there were moments when I faced tricky bugs and issues that initially seemed insurmountable. But my journey through Hacktoberfest has taught me the value of persistence and adaptation. These experiences have made me even more enthusiastic about open-source and its limitless possibilities.&lt;/p&gt;

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

&lt;p&gt;Before Hacktoberfest 2023, my knowledge in information technology was still developing. This experience has been a catalyst for my growth, expanding my coding, collaboration, and problem-solving skills. It has not only enriched my academic journey but also ignited a strong passion for technology and open-source. This first Hacktoberfest has set a solid foundation for my future contributions and learning in the tech community.&lt;/p&gt;

&lt;p&gt;I extend my heartfelt thanks to the entire Hacktoberfest community, the DEV team, and all the open-source maintainers and contributors who have been part of this incredible journey. Let's celebrate our collective achievements and continue to make a difference in the world of technology. 🚀💻&lt;/p&gt;

&lt;h5&gt;
  
  
  Hacktoberfest2023
&lt;/h5&gt;

&lt;h5&gt;
  
  
  FirstTimer
&lt;/h5&gt;

&lt;h5&gt;
  
  
  TechEnthusiast
&lt;/h5&gt;




</description>
      <category>hack23contributor</category>
    </item>
    <item>
      <title>Enhancing Security and Simplicity with Appwrite Authentication</title>
      <dc:creator>Muhammadh Ahzem </dc:creator>
      <pubDate>Mon, 16 Oct 2023 22:33:44 +0000</pubDate>
      <link>https://dev.to/ahzem/enhancing-security-and-simplicity-with-appwrite-authentication-2e5l</link>
      <guid>https://dev.to/ahzem/enhancing-security-and-simplicity-with-appwrite-authentication-2e5l</guid>
      <description>&lt;p&gt;&lt;strong&gt;Introduction&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;In the digital age, security and user authentication are paramount. From social media platforms to e-commerce websites, protecting user data and providing a seamless login experience is a fundamental concern for developers. Appwrite, an open-source platform for building web and mobile apps, offers a comprehensive Authentication service to simplify this process. In this blog post, we'll explore how Appwrite Authentication can enhance both security and user experience.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Appwrite Authentication: A Brief Overview&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Appwrite's Authentication service provides a straightforward way to handle user authentication. Whether you're developing a single-page application or a complex web service, Appwrite offers several features that make it stand out.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1. Social Login Providers&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Appwrite Authentication allows users to sign in using popular social platforms such as Google, Facebook, and GitHub. This feature streamlines the registration and login process, making it more accessible for users.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. Email and Password Authentication&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;For users who prefer a traditional email and password setup, Appwrite provides a secure and customizable authentication system. Passwords are hashed and salted, ensuring data protection.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3. JWT Tokens&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Appwrite issues JSON Web Tokens (JWT) upon successful authentication. These tokens can be used to securely authenticate API requests, providing an extra layer of security for your application.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;4. OAuth Support&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;For developers looking to implement OAuth2 flows for external services, Appwrite Authentication supports OAuth providers like Google, Facebook, and more. This feature simplifies integration with third-party services.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;5. Custom User Data&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Appwrite Authentication allows you to store custom user data, which can be valuable for tailoring user experiences and managing app-specific information.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The Power of Simplicity&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;One of the remarkable aspects of Appwrite Authentication is its simplicity. The platform provides client libraries for various programming languages, making it easy to integrate the service into your application. You don't need to be a security expert to ensure your app's authentication is robust; Appwrite handles the heavy lifting.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Getting Started with Appwrite Authentication&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Here's a basic example of using Appwrite Authentication in a JavaScript application:&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;// Initialize Appwrite&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;appwrite&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;Appwrite&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;

&lt;span class="c1"&gt;// Set project ID and endpoint&lt;/span&gt;
&lt;span class="nx"&gt;appwrite&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;setProject&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;your_project_id&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="nx"&gt;appwrite&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;setEndpoint&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;https://api.appwrite.io&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="c1"&gt;// Initialize Authentication&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;auth&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nx"&gt;Appwrite&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;Auth&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;appwrite&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="c1"&gt;// Sign up a new user&lt;/span&gt;
&lt;span class="nx"&gt;auth&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;createAccount&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;email@example.com&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;securepassword&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;username&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
  &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;then&lt;/span&gt;&lt;span class="p"&gt;(()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;User registered successfully&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="p"&gt;})&lt;/span&gt;
  &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="k"&gt;catch&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="nx"&gt;error&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;error&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Error: &lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="nx"&gt;error&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;p&gt;&lt;strong&gt;Conclusion&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Appwrite Authentication is a powerful tool for developers who want to streamline user authentication without compromising security. By offering a range of authentication options, simplified integration, and customizability, Appwrite empowers developers to create secure and user-friendly applications. Whether you're a seasoned developer or just starting your journey in information technology, Appwrite's Authentication service can help you build unique and secure digital experiences.&lt;/p&gt;

&lt;p&gt;For more information and detailed documentation, visit the &lt;a href="https://appwrite.io/docs/auth" rel="noopener noreferrer"&gt;Appwrite website&lt;/a&gt; or explore their GitHub repository.&lt;/p&gt;

&lt;p&gt;Remember, in the world of app development, it's not just about creating unique solutions; it's about making them secure and accessible. Appwrite Authentication can be a game-changer in achieving this goal.&lt;/p&gt;

&lt;p&gt;Happy coding!&lt;/p&gt;

</description>
      <category>opensource</category>
      <category>news</category>
      <category>appwritehack</category>
    </item>
    <item>
      <title>Hacktoberfest23 Pledge</title>
      <dc:creator>Muhammadh Ahzem </dc:creator>
      <pubDate>Fri, 13 Oct 2023 17:00:57 +0000</pubDate>
      <link>https://dev.to/ahzem/hacktoberfest23-pledge-130d</link>
      <guid>https://dev.to/ahzem/hacktoberfest23-pledge-130d</guid>
      <description>&lt;p&gt;I will like to successfully start my open source journey with this edition of Hacktoberfest. I am excited to participate in Hacktoberfest and embark on my open source journey. This edition of Hacktoberfest presents a wonderful opportunity for me to contribute to the open source community and make a meaningful impact. I am eager to learn, collaborate, and hone my skills while working on interesting projects.&lt;/p&gt;

&lt;p&gt;During this Hacktoberfest, I aim to explore various open source projects and find ones that align with my interests and expertise. Whether it is contributing code, fixing bugs, improving documentation, or suggesting new features, I am ready to roll up my sleeves and dive into the world of open source.&lt;/p&gt;

&lt;p&gt;I believe that open source is not just about writing code; it is about fostering a spirit of collaboration and innovation. By joining this global event, I hope to connect with like-minded individuals who share a passion for technology and a commitment to making the world a better place through open source contributions.&lt;/p&gt;

&lt;p&gt;I am grateful for the opportunity Hacktoberfest provides to learn from experienced developers and receive feedback on my work. I understand that open source is a community-driven effort, and I am excited to be a part of this vibrant community. I am confident that this journey will not only enhance my technical skills but also help me grow as a developer by exposing me to different perspectives and approaches.&lt;/p&gt;

&lt;p&gt;As I begin my open source journey with this edition of Hacktoberfest, I am filled with enthusiasm and determination. I am ready to embrace challenges, overcome obstacles, and make a positive impact on the open source projects I contribute to. I look forward to the rewarding experiences, knowledge sharing, and personal growth that lie ahead.&lt;/p&gt;

&lt;p&gt;Let's dive into #Hacktoberfest together and make this edition a memorable one!&lt;/p&gt;

</description>
      <category>hacktoberfest23</category>
      <category>hacktoberfest</category>
    </item>
  </channel>
</rss>
