<?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: Moses</title>
    <description>The latest articles on DEV Community by Moses (@qurlarmah).</description>
    <link>https://dev.to/qurlarmah</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F1969106%2F41f31dc0-b04d-4511-a9f1-1b95951465b5.jpg</url>
      <title>DEV Community: Moses</title>
      <link>https://dev.to/qurlarmah</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/qurlarmah"/>
    <language>en</language>
    <item>
      <title>Katiba Mobile App: Gamified mobile app for learning Kenya's Constitution.</title>
      <dc:creator>Moses</dc:creator>
      <pubDate>Mon, 16 Feb 2026 07:21:02 +0000</pubDate>
      <link>https://dev.to/qurlarmah/katiba-mobile-app-gamified-mobile-app-for-learning-kenyas-constitution-ek9</link>
      <guid>https://dev.to/qurlarmah/katiba-mobile-app-gamified-mobile-app-for-learning-kenyas-constitution-ek9</guid>
      <description>&lt;p&gt;&lt;em&gt;This is a submission for the &lt;a href="https://dev.to/challenges/github-2026-01-21"&gt;GitHub Copilot CLI Challenge&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

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

&lt;h3&gt;
  
  
  About Me &amp;amp; My Project
&lt;/h3&gt;

&lt;p&gt;My name is Moses Mtengo, a passionate software developer from Kenya who graduated with a BSc. in Telecommunications &amp;amp; IT from Machakos University in November 2025. My journey with Kotlin and modern UI development began during my time as a Google Developer Student Club Lead, where I organized Compose Camps to introduce fellow students to Jetpack Compose. This experience sparked a deep commitment to the Kotlin ecosystem, leading me to establish and lead the Kotlin User Group Machakos, where I continue mentoring developers in Kotlin Multiplatform technologies.&lt;/p&gt;

&lt;p&gt;Beyond coding, I enjoy chess, gaming, and most importantly, building projects that create positive societal impact—solutions born from real problems I've witnessed firsthand.&lt;/p&gt;

&lt;h3&gt;
  
  
  The Inspiration Behind Katiba
&lt;/h3&gt;

&lt;p&gt;Katiba was inspired by Ng'ang'a Muigai, a Kenyan political activist who travels across the country teaching citizens about the 2010 Kenyan Constitution—one of the most progressive constitutions in the world. He realized that citizens' lack of constitutional knowledge allows leaders to neglect their responsibilities. Moved by his mission, I reached out and promised to support his work by building a free mobile app. Katiba empowers Kenyans to learn the constitution at their own pace, eliminating the barriers of purchasing physical copies and making constitutional education accessible anywhere, anytime.&lt;/p&gt;

&lt;h3&gt;
  
  
  Technologies Used
&lt;/h3&gt;

&lt;p&gt;Katiba is built with cutting-edge technologies including:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Kotlin 2.1.0&lt;/strong&gt; with &lt;strong&gt;Compose Multiplatform 1.7.3&lt;/strong&gt; for shared Android/iOS UI&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Navigation 3&lt;/strong&gt; for type-safe, modern navigation&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Spring physics animations&lt;/strong&gt; in the bottom navigation bar for fluid, natural interactions&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;R8 optimizer&lt;/strong&gt; for smaller, faster release builds&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Kotlin Coroutines&lt;/strong&gt; and &lt;strong&gt;Serialization&lt;/strong&gt; for efficient async operations&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Material Design 3&lt;/strong&gt; for a polished, accessible interface&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This project represents my belief that technology should empower citizens and strengthen democracy through accessible education.&lt;/p&gt;




&lt;h3&gt;
  
  
  🎯 Key Features
&lt;/h3&gt;

&lt;h4&gt;
  
  
  1. Home Tab - Daily Learning Hub
&lt;/h4&gt;

&lt;p&gt;The Home Tab serves as the primary engagement point, featuring three distinct cards that refresh daily:&lt;/p&gt;

&lt;h5&gt;
  
  
  Card 1: Clause of the Day
&lt;/h5&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Purpose&lt;/strong&gt;: Introduce users to a single constitutional clause each day&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Content&lt;/strong&gt;: Full text of the clause with chapter and article references&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Interaction&lt;/strong&gt;: Single-page focused view for deep reading&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Actions&lt;/strong&gt;: Share, bookmark, and save for later reference&lt;/li&gt;
&lt;/ul&gt;

&lt;h5&gt;
  
  
  Card 2: AI-Powered Insights &amp;amp; Video Education
&lt;/h5&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Purpose&lt;/strong&gt;: Explain the significance and meaning of the daily clause&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Content&lt;/strong&gt;: 

&lt;ul&gt;
&lt;li&gt;Page 1: AI-generated explanation in plain language&lt;/li&gt;
&lt;li&gt;Page 2: Professional civic educator video (uploaded daily by admins)&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;

&lt;strong&gt;Navigation&lt;/strong&gt;: Horizontal swipe or tap left/right to switch between pages&lt;/li&gt;

&lt;li&gt;

&lt;strong&gt;Features&lt;/strong&gt;: Video player with standard playback controls&lt;/li&gt;

&lt;/ul&gt;

&lt;h5&gt;
  
  
  Card 3: Practical Application Tips
&lt;/h5&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Purpose&lt;/strong&gt;: Connect constitutional knowledge to daily life&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Content&lt;/strong&gt;:

&lt;ul&gt;
&lt;li&gt;Page 1: AI-powered "next steps" - actions citizens can take&lt;/li&gt;
&lt;li&gt;Page 2: Practical tips for leveraging the clause in real-life situations&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;

&lt;strong&gt;Navigation&lt;/strong&gt;: Multi-page horizontal navigation&lt;/li&gt;

&lt;li&gt;

&lt;strong&gt;Value&lt;/strong&gt;: Transforms abstract legal concepts into actionable insights&lt;/li&gt;

&lt;/ul&gt;

&lt;h4&gt;
  
  
  2. Constitution Tab - Digital Reader
&lt;/h4&gt;

&lt;p&gt;Inspired by popular Bible reader apps, this tab provides a seamless reading experience:&lt;/p&gt;

&lt;h5&gt;
  
  
  Features
&lt;/h5&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Complete Text&lt;/strong&gt;: Full Kenyan Constitution from Preamble through all Schedules&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Chapter Navigation&lt;/strong&gt;: 18 chapters organized hierarchically&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Article &amp;amp; Clause Structure&lt;/strong&gt;: Numbered sections for easy reference&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Vertical Scrolling&lt;/strong&gt;: Natural reading flow for long-form content&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Quick Navigation&lt;/strong&gt;: Jump to any chapter, article, or clause&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Search Function&lt;/strong&gt;: (Planned) Find specific terms or concepts&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Bookmarks&lt;/strong&gt;: (Planned) Mark important sections for reference&lt;/li&gt;
&lt;/ul&gt;

&lt;h5&gt;
  
  
  Content Structure
&lt;/h5&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Preamble
├── Chapter 1: Sovereignty of the People and Supremacy of the Constitution
├── Chapter 2: The Republic
├── Chapter 3: Citizenship
├── Chapter 4: The Bill of Rights
│   ├── General Provisions
│   ├── Rights and Fundamental Freedoms
│   └── Application of Rights
├── Chapter 5: Land
├── Chapter 6: Leadership and Integrity
├── Chapter 7: Representation of the People
├── Chapter 8: The Legislature
├── Chapter 9: The Executive
├── Chapter 10: Judiciary
├── Chapter 11: Devolved Government
├── Chapter 12: Public Finance
├── Chapter 13: The Public Service
├── Chapter 14: National Security
├── Chapter 15: Commissions and Independent Offices
├── Chapter 16: Amendment of the Constitution
├── Chapter 17: General Provisions
└── Chapter 18: Transitional and Consequential Provisions
Schedules (7 total)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h4&gt;
  
  
  3. Learning Plans Tab - Gamified Education
&lt;/h4&gt;

&lt;p&gt;Modeled after Duolingo's successful learning path approach:&lt;/p&gt;

&lt;h5&gt;
  
  
  Learning Path Structure
&lt;/h5&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Vertical Progress Journey&lt;/strong&gt;: Visual representation of learning journey&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Milestone Nodes&lt;/strong&gt;: Shield-shaped nodes representing chapters (culturally relevant)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Lesson Modules&lt;/strong&gt;: Bite-sized lessons covering constitutional topics sequentially&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;State Indicators&lt;/strong&gt;:

&lt;ul&gt;
&lt;li&gt;✅ Completed (green shield)&lt;/li&gt;
&lt;li&gt;🎯 Current (pulsing animation)&lt;/li&gt;
&lt;li&gt;🔒 Locked (requires previous completion)&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;

&lt;h5&gt;
  
  
  Gamification Elements
&lt;/h5&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;XP Points&lt;/strong&gt;: Earn experience points for completing lessons&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Streak Counter&lt;/strong&gt;: Track consecutive days of learning&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Achievement Badges&lt;/strong&gt;: Unlock badges for milestones&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Progress Bar&lt;/strong&gt;: Visual feedback on overall completion&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Level System&lt;/strong&gt;: Progress through beginner → intermediate → advanced&lt;/li&gt;
&lt;/ul&gt;

&lt;h5&gt;
  
  
  Lesson Structure
&lt;/h5&gt;

&lt;p&gt;Each lesson includes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Introduction to topic&lt;/li&gt;
&lt;li&gt;Key concepts explanation&lt;/li&gt;
&lt;li&gt;Interactive quiz questions&lt;/li&gt;
&lt;li&gt;Real-world application examples&lt;/li&gt;
&lt;li&gt;Progress checkpoint&lt;/li&gt;
&lt;li&gt;XP reward upon completion&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  4. Profile Tab - Personal Civic Journey
&lt;/h4&gt;

&lt;p&gt;Track your learning progress and civic engagement:&lt;/p&gt;

&lt;h5&gt;
  
  
  Profile Sections
&lt;/h5&gt;

&lt;p&gt;&lt;strong&gt;Bio Card&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;User name and avatar&lt;/li&gt;
&lt;li&gt;Join date&lt;/li&gt;
&lt;li&gt;Email/contact information&lt;/li&gt;
&lt;li&gt;Location details&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Residence Information&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;County selection&lt;/li&gt;
&lt;li&gt;Constituency&lt;/li&gt;
&lt;li&gt;Ward (optional)&lt;/li&gt;
&lt;li&gt;Purpose: Connect learning to local governance structures&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Streak Display&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Current learning streak (consecutive days)&lt;/li&gt;
&lt;li&gt;Longest streak achieved&lt;/li&gt;
&lt;li&gt;Fire icon animation for active streaks&lt;/li&gt;
&lt;li&gt;Motivation for daily engagement&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Badges Gallery&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Visual display of earned achievement badges&lt;/li&gt;
&lt;li&gt;Locked badges showing requirements&lt;/li&gt;
&lt;li&gt;Badge categories:

&lt;ul&gt;
&lt;li&gt;Chapter completions&lt;/li&gt;
&lt;li&gt;Streak milestones&lt;/li&gt;
&lt;li&gt;Quiz performance&lt;/li&gt;
&lt;li&gt;Special achievements&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Activity History&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Recent learning activities&lt;/li&gt;
&lt;li&gt;Lessons completed&lt;/li&gt;
&lt;li&gt;Clauses read&lt;/li&gt;
&lt;li&gt;Videos watched&lt;/li&gt;
&lt;li&gt;Time-stamped activity log&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Settings Access&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Cog icon in top-right corner&lt;/li&gt;
&lt;li&gt;Access to app configuration&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  5. Settings Screen
&lt;/h4&gt;

&lt;p&gt;Comprehensive app configuration:&lt;/p&gt;

&lt;h5&gt;
  
  
  Settings Categories
&lt;/h5&gt;

&lt;p&gt;&lt;strong&gt;Account Settings&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Profile information&lt;/li&gt;
&lt;li&gt;Email/phone verification&lt;/li&gt;
&lt;li&gt;Password management&lt;/li&gt;
&lt;li&gt;Account deletion&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Notification Preferences&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Daily clause reminders&lt;/li&gt;
&lt;li&gt;Streak notifications&lt;/li&gt;
&lt;li&gt;Achievement alerts&lt;/li&gt;
&lt;li&gt;Learning recommendations&lt;/li&gt;
&lt;li&gt;Quiet hours configuration&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Display Preferences&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Light/Dark theme toggle&lt;/li&gt;
&lt;li&gt;Text size adjustment&lt;/li&gt;
&lt;li&gt;Reading mode preferences&lt;/li&gt;
&lt;li&gt;Accessibility options&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Language Settings&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;English/Swahili toggle&lt;/li&gt;
&lt;li&gt;Additional languages (future)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;About Section&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;App version&lt;/li&gt;
&lt;li&gt;Credits and acknowledgments&lt;/li&gt;
&lt;li&gt;Privacy policy&lt;/li&gt;
&lt;li&gt;Terms of service&lt;/li&gt;
&lt;li&gt;Contact support&lt;/li&gt;
&lt;/ul&gt;




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

&lt;p&gt;&lt;a href="https://github.com/MyKatiba/Katiba" rel="noopener noreferrer"&gt;GitHub Repository&lt;/a&gt;&lt;br&gt;
&lt;a href="https://youtu.be/ilPWK7Wg5kk" rel="noopener noreferrer"&gt;Video walkthrough&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  My Experience with GitHub Copilot CLI
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Building Katiba: Navigating Authentication with GitHub Copilot
&lt;/h3&gt;

&lt;p&gt;Here's my situation: I work with &lt;strong&gt;Android development&lt;/strong&gt;, &lt;strong&gt;Kotlin&lt;/strong&gt;, and &lt;strong&gt;Jetpack Compose&lt;/strong&gt;. I'm comfortable with mobile architecture, API integrations and UI development. But building a full authentication flow with OTP verification, password reset and proper error handling across multiple screens? That was a lot of ground to cover efficiently.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;GitHub Copilot&lt;/strong&gt; was my guide through the complex parts.&lt;/p&gt;

&lt;h3&gt;
  
  
  The First Conversation: "How Do I Structure This?"
&lt;/h3&gt;

&lt;p&gt;I knew what I wanted to build — a constitutional guide app called &lt;strong&gt;Katiba&lt;/strong&gt; with proper user authentication. I didn't know the best way to wire up the auth flow cleanly across the app.&lt;/p&gt;

&lt;p&gt;I asked Copilot:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"How do I structure an authentication flow in Jetpack Compose with OTP verification and password reset?"&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Copilot gave me a clear strategy:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Use a &lt;code&gt;UserApiClient&lt;/code&gt; to centralize all API calls with proper token management.&lt;/li&gt;
&lt;li&gt;Use &lt;strong&gt;Compose navigation&lt;/strong&gt; with sealed routes to handle the multi-step auth flow.&lt;/li&gt;
&lt;li&gt;Don't scatter auth logic everywhere — use a profile-based approach where &lt;code&gt;getProfile&lt;/code&gt; validates the session and &lt;code&gt;updateProfile&lt;/code&gt; handles user changes.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That last point was key. Instead of duplicating auth checks across every screen, I centralized it in &lt;code&gt;UserApiClient&lt;/code&gt; so every request automatically includes the bearer token and handles errors consistently.&lt;/p&gt;

&lt;h3&gt;
  
  
  The Battle: Error Handling Across Screens
&lt;/h3&gt;

&lt;p&gt;My auth flow worked perfectly on the happy path. Then I started testing edge cases.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Immediate confusion for the user.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The problem? Error messages from the API were getting swallowed or displayed inconsistently across &lt;code&gt;ForgotPasswordScreen&lt;/code&gt;, the OTP screen and the profile update flow.&lt;/p&gt;

&lt;p&gt;I asked Copilot:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"My error handling is inconsistent across auth screens. How do I standardize this?"&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Copilot helped me refactor the error handling so every API response follows the same pattern — clear error states, proper callback naming and readable control flow. Simple fix. Now every screen handles errors the same way.&lt;/p&gt;

&lt;h3&gt;
  
  
  The Optimization: Simplifying Auth Checks
&lt;/h3&gt;

&lt;p&gt;Early on, the authentication validation logic in &lt;code&gt;UserApiClient&lt;/code&gt; was getting verbose and hard to follow. Multiple nested conditions, redundant checks.&lt;/p&gt;

&lt;p&gt;I asked Copilot:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"How can I simplify these authentication checks without losing any security?"&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Copilot helped me streamline the logic — cleaner conditionals, better method naming (like updating callback names in &lt;code&gt;ForgotPasswordScreen&lt;/code&gt; for clarity) and removing unnecessary intermediate variables. The code went from walls of nested &lt;code&gt;if&lt;/code&gt; statements to something I could actually read six months later.&lt;/p&gt;

&lt;h3&gt;
  
  
  The Readability Decision
&lt;/h3&gt;

&lt;p&gt;I knew I needed to clean up &lt;code&gt;getProfile&lt;/code&gt; and &lt;code&gt;updateProfile&lt;/code&gt;. They worked, but the error handling was messy and the code was hard to follow for anyone else joining the project.&lt;/p&gt;

&lt;p&gt;I asked Copilot:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"How can I improve the readability and error handling in these API methods?"&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The answer: extract common patterns, use descriptive variable names, and let exceptions flow naturally instead of catching everything silently. Copilot walked me through the refactor step by step and the result was methods that are both more robust and easier to understand.&lt;/p&gt;

&lt;h3&gt;
  
  
  The Distribution Reality
&lt;/h3&gt;

&lt;p&gt;Here's something I think about: &lt;em&gt;how do users actually get Katiba on their devices?&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;The app needs to talk to a backend API, handle authentication tokens securely and manage user sessions — all while feeling native and fast on Android. Each piece has to work together seamlessly, from the Compose UI layer down to the network calls.&lt;/p&gt;

&lt;p&gt;Copilot helped me think through the architecture so that each layer stays clean and independent. The &lt;strong&gt;API client&lt;/strong&gt; handles networking, the &lt;strong&gt;ViewModels&lt;/strong&gt; manage state and the &lt;strong&gt;Compose screens&lt;/strong&gt; just render what they're told. Decoupled, testable and easy to extend when new features come along.&lt;/p&gt;

&lt;h3&gt;
  
  
  The Data Dilemma: JSON vs. YAML
&lt;/h3&gt;

&lt;p&gt;Before I could even think about rendering the Constitution, I had to figure out how to store it. I had the raw text file (&lt;code&gt;The_Constitution_of_Kenya_2010.txt&lt;/code&gt;), but dumping unstructured text into an app is a recipe for disaster. The app needed to know exactly what a "Chapter," "Article,", "Clause", "sub-Clause" and "mini-Clause" was so users could navigate it like a digital Bible.&lt;/p&gt;

&lt;p&gt;I jumped into the terminal and asked GitHub Copilot CLI:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"I need to convert a massive text file of the Kenyan Constitution into a structured format to bundle in my Android app's assets. Should I use JSON or YAML for runtime parsing with Kotlin?"&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Copilot CLI broke it down beautifully. While YAML is highly readable for humans, JSON is the undisputed champion for fast, native parsing on Android, especially when paired with &lt;code&gt;kotlinx.serialization&lt;/code&gt;. JSON won.&lt;/p&gt;

&lt;h3&gt;
  
  
  The Python Parser
&lt;/h3&gt;

&lt;p&gt;The next hurdle was actually doing the conversion. The Constitution has a deeply nested and somewhat inconsistent hierarchy: Chapters -&amp;gt; Parts (sometimes) -&amp;gt; Articles -&amp;gt; Clauses -&amp;gt; SubClauses -&amp;gt; MiniClauses. Plus, it was littered with page footers and sometimes paragraphs, tables and even images.&lt;/p&gt;

&lt;p&gt;I used Copilot CLI to kickstart the parsing script:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"Write a Python script to parse a text file of the Constitution into a nested JSON structure. It needs to use regex to identify Chapters, Parts, Articles, Clauses (1), SubClauses (a) and MiniClauses (i)"&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Copilot CLI generated a robust Python script that acted as my baseline. It used regular expressions to strip out the messy artifacts (``) and properly nest the arrays. When it struggled with edge cases—like the tabular data in the Fifth Schedule—I was able to iterate with Copilot to write a custom table parser just for that section.&lt;/p&gt;

&lt;h3&gt;
  
  
  Building the Data Repository
&lt;/h3&gt;

&lt;p&gt;With &lt;code&gt;kenya_constitution.json&lt;/code&gt; sitting in my &lt;code&gt;assets&lt;/code&gt; folder, I needed a way to get it into the app's memory without blocking the main thread. &lt;/p&gt;

&lt;p&gt;I asked Copilot CLI:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"How do I build a repository in Kotlin using Coroutines and kotlinx.serialization to read and parse a large JSON file from the assets folder?"&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;It gave me the exact boilerplate I needed: an &lt;code&gt;AssetManager&lt;/code&gt; injected into a repository class, a suspend function running on &lt;code&gt;Dispatchers.IO&lt;/code&gt; and the exact &lt;code&gt;Json.decodeFromString&lt;/code&gt; syntax to map the data to my Kotlin data classes. &lt;/p&gt;

&lt;h3&gt;
  
  
  Debugging the Void
&lt;/h3&gt;

&lt;p&gt;Everything compiled, but when I launched the app, my Reader Page was a ghost town. Some Chapters were missing their Articles and certain Clauses were completely swallowed. &lt;/p&gt;

&lt;p&gt;The issue was the parsing logic—some Articles didn't have Clauses and some Parts were entirely skipped by the Python script's regex.&lt;/p&gt;

&lt;p&gt;I fed the error logs and snippets of the broken JSON back into Copilot CLI:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"My Kotlin data classes expect a list of SubClauses, but the JSON sometimes returns empty objects or skips from Article straight to text. How do I fix the parsing logic or handle these nullability issues in Kotlin?"&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Copilot helped me tackle it from both ends. First, it helped me fix the Python regex to ensure every structural level was accounted for (even if it meant generating an empty array). Second, it suggested making my Kotlin data classes more resilient by assigning default empty lists (&lt;code&gt;val clauses: List&amp;lt;Clause&amp;gt; = emptyList()&lt;/code&gt;). Suddenly, the data populated.&lt;/p&gt;

&lt;h3&gt;
  
  
  Refining the Reader UI
&lt;/h3&gt;

&lt;p&gt;The final piece of the puzzle was the Reader Page itself. Rendering a massive, deeply nested document in Jetpack Compose without dropping frames requires a solid &lt;code&gt;LazyColumn&lt;/code&gt;. I also needed the hierarchy to be visually distinct—Chapters needed to look heavy and authoritative, while SubClauses needed proper indentation.&lt;/p&gt;

&lt;p&gt;I asked Copilot:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"How do I build a Jetpack Compose LazyColumn to render a deeply nested Constitution structure? I need distinct typography for Chapters, Articles and indented text for Clauses."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Copilot scaffolded a clean UI utilizing Compose's &lt;code&gt;item&lt;/code&gt; and &lt;code&gt;items&lt;/code&gt; DSL. It guided me in creating modular composables (&lt;code&gt;ChapterHeader&lt;/code&gt;, &lt;code&gt;ArticleTitle&lt;/code&gt;, &lt;code&gt;ClauseText&lt;/code&gt;) and applying &lt;code&gt;Modifier.padding&lt;/code&gt; dynamically based on the depth of the nesting. &lt;/p&gt;

&lt;p&gt;The result? A butter-smooth scrolling experience where users can seamlessly read the supreme law of the land, perfectly formatted and deeply navigable.&lt;/p&gt;

&lt;h2&gt;
  
  
  Developer
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://dev.to/qurlarmah"&gt;Moses Mtengo&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Testing For Judges
&lt;/h2&gt;

&lt;p&gt;The app currently runs on Android but iOS support will be available soon. You can access the apk, for testing on an &lt;strong&gt;android&lt;/strong&gt; device, via the &lt;strong&gt;Releases&lt;/strong&gt; tab on the GitHub Repo linked above.&lt;br&gt;
You can create an account via &lt;strong&gt;Google Signup&lt;/strong&gt; to begin accessing the app.&lt;/p&gt;

</description>
      <category>devchallenge</category>
      <category>githubchallenge</category>
      <category>cli</category>
      <category>githubcopilot</category>
    </item>
    <item>
      <title>✨Dive into Markdown Magic!</title>
      <dc:creator>Moses</dc:creator>
      <pubDate>Wed, 04 Sep 2024 03:44:28 +0000</pubDate>
      <link>https://dev.to/qurlarmah/dive-into-markdown-magic-24m4</link>
      <guid>https://dev.to/qurlarmah/dive-into-markdown-magic-24m4</guid>
      <description>&lt;p&gt;Have you ever admired a beautifully crafted README, a polished Issue description or wonderfully formatted content right here on &lt;a href="https://dev.to/"&gt;Dev.to&lt;/a&gt; and wished you could do the same? Now’s your chance to learn how! 💻📝&lt;/p&gt;

&lt;h2&gt;
  
  
  What is Markdown, You Ask?🤔
&lt;/h2&gt;

&lt;p&gt;Markdown is a lightweight markup language for creating formatted text using a plain-text editor.&lt;br&gt;
&lt;strong&gt;John Gruber&lt;/strong&gt; created Markdown in &lt;em&gt;2004&lt;/em&gt; in collaboration with &lt;strong&gt;Aaron Swartz&lt;/strong&gt; as an easy-to-read markup language.&lt;br&gt;
Markdown is widely used for blogging and instant messaging, and elsewhere in online forums, collaborative software i.e. GitHub, documentation pages and README files.&lt;/p&gt;
&lt;h2&gt;
  
  
  Why Markdown?💡
&lt;/h2&gt;

&lt;p&gt;Markdown is a sleek, powerful tool for content editing and it's the go-to standard for platforms like GitHub. Its versatility spans across various editors, both in browsers and clients.&lt;/p&gt;

&lt;p&gt;While HTML is great for rendering content exactly how it was intended, it takes up a lot of space and can be hard to work with, even in small doses. The invention of Markdown offered a great compromise between the power of HTML for content description and the ease of plain text for editing.&lt;/p&gt;
&lt;h2&gt;
  
  
  Markdown Syntax
&lt;/h2&gt;
&lt;h3&gt;
  
  
  1. Emphasize Text
&lt;/h3&gt;

&lt;p&gt;Create &lt;strong&gt;bold&lt;/strong&gt; text by using two asterisks (**) or two underscores (__).&lt;/p&gt;

&lt;p&gt;Markdown for bold text:&lt;br&gt;
&lt;code&gt;This is **bold** text.&lt;/code&gt;&lt;br&gt;
&lt;code&gt;This is also __bold__ text.&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Result:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;This is &lt;strong&gt;bold&lt;/strong&gt; text.&lt;br&gt;
This is also &lt;strong&gt;bold&lt;/strong&gt; text.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Create &lt;em&gt;italic&lt;/em&gt; text by using single asterisks &lt;code&gt;*&lt;/code&gt; or single underscores &lt;code&gt;_&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Markdown for italic text:&lt;br&gt;
&lt;code&gt;This is *italic* text.&lt;/code&gt;&lt;br&gt;
&lt;code&gt;This is also _italic_ text.&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Result:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;This is &lt;em&gt;italic&lt;/em&gt; text.&lt;br&gt;
This is also &lt;em&gt;italic&lt;/em&gt; text.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Create strike through text using double tildes &lt;code&gt;~~&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Markdown for strike through text:&lt;br&gt;
&lt;code&gt;~~Strike through~~&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Result:&lt;br&gt;
&lt;del&gt;Strike through&lt;/del&gt;&lt;/p&gt;

&lt;p&gt;Create a horizontal rule using &lt;code&gt;---&lt;/code&gt;, &lt;code&gt;___&lt;/code&gt; or &lt;code&gt;***&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Markdown for a horizontal rule:&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;Result:&lt;/p&gt;

&lt;blockquote&gt;

&lt;/blockquote&gt;

&lt;p&gt;To use a literal asterisk, precede it with a backslash (). This example results in the underscores and asterisks being shown in the output.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;\_This is all \*\*plain\*\* text\_.&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Result:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;_This is all **plain** text_.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  2. Quote text
&lt;/h3&gt;

&lt;p&gt;You can create blockquotes using the greater than &lt;code&gt;&amp;gt;&lt;/code&gt; character.&lt;/p&gt;

&lt;p&gt;Markdown for quoted text:&lt;br&gt;
&lt;code&gt;&amp;gt; This is quoted text.&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Result:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;This is quoted text.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  3. Code
&lt;/h3&gt;

&lt;p&gt;Use a single backtick &lt;strong&gt;`&lt;/strong&gt; for single line code and three backticks &lt;strong&gt;&lt;code&gt;&lt;/code&gt;`&lt;/strong&gt; for a code block.&lt;/p&gt;

&lt;p&gt;Markdown for single line code:&lt;br&gt;
&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Feprcb5hwpgq5ibwdmhz7.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Feprcb5hwpgq5ibwdmhz7.png" alt="Image description" width="197" height="55"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Result:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;This is &lt;code&gt;code&lt;/code&gt;.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Markdown for a code block:&lt;br&gt;
&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fhagsm8v7c4mkbs4ey1ah.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fhagsm8v7c4mkbs4ey1ah.png" alt="Image description" width="293" height="190"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Result:&lt;br&gt;
&lt;code&gt;`markdown&lt;br&gt;
var first = 1;&lt;br&gt;
var second = 2;&lt;br&gt;
var sum = first + second;&lt;br&gt;
`&lt;/code&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  4. HTML additions
&lt;/h3&gt;

&lt;p&gt;If you come across an HTML scenario not supported by Markdown, you can use that HTML inline.&lt;/p&gt;

&lt;p&gt;Markdown using HTML:&lt;br&gt;
&lt;code&gt;Here is a&amp;lt;br /&amp;gt;line break&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Result:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Here is a&lt;br&gt;line break&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  5. Headings
&lt;/h3&gt;

&lt;p&gt;These are quite similar with HTML headings, such as the &lt;code&gt;&amp;lt;h1&amp;gt;&lt;/code&gt; tag.&lt;br&gt;
You can also place  an equal sign &lt;code&gt;=&lt;/code&gt; underneath a title for a &lt;em&gt;Headline level 1&lt;/em&gt; and a hyphen &lt;code&gt;-&lt;/code&gt; for a &lt;em&gt;Headline level 2&lt;/em&gt;.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;code&gt;#&lt;/code&gt; - Headline level 1 (Biggest)&lt;br&gt;
&lt;code&gt;##&lt;/code&gt; - Headline level 2&lt;br&gt;
&lt;code&gt;###&lt;/code&gt; - Headline level 3&lt;br&gt;
&lt;code&gt;####&lt;/code&gt; - Headline level 4&lt;br&gt;
&lt;code&gt;#####&lt;/code&gt; - Headline level 5&lt;br&gt;
&lt;code&gt;######&lt;/code&gt; - Headline level 6 (Smallest)&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  6. Lists
&lt;/h3&gt;

&lt;p&gt;You can define &lt;strong&gt;ordered&lt;/strong&gt; or &lt;strong&gt;unordered&lt;/strong&gt; lists. You can also define nested items through indentation.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Ordered lists start with numbers.&lt;/li&gt;
&lt;li&gt;Unordered lists start with Hyphens &lt;code&gt;-&lt;/code&gt;, Asterisks &lt;code&gt;*&lt;/code&gt; or plus signs &lt;code&gt;+&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Markdown for an unordered list:&lt;br&gt;
`&lt;code&gt;&lt;/code&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;First&lt;/li&gt;
&lt;li&gt;Nested&lt;/li&gt;
&lt;li&gt;Second&lt;/li&gt;
&lt;li&gt;Third
&lt;code&gt;&lt;/code&gt;`&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Result:&lt;/p&gt;

&lt;blockquote&gt;
&lt;ul&gt;
&lt;li&gt;First&lt;/li&gt;
&lt;li&gt;Nested&lt;/li&gt;
&lt;li&gt;Second&lt;/li&gt;
&lt;li&gt;Third&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;

&lt;p&gt;Markdown for an ordered list:&lt;br&gt;
`&lt;code&gt;&lt;/code&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;First&lt;/li&gt;
&lt;li&gt;Second&lt;/li&gt;
&lt;li&gt;Third
&lt;code&gt;&lt;/code&gt;`&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Result:&lt;/p&gt;

&lt;blockquote&gt;
&lt;ol&gt;
&lt;li&gt;First&lt;/li&gt;
&lt;li&gt;Second&lt;/li&gt;
&lt;li&gt;Third&lt;/li&gt;
&lt;/ol&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  7. Links
&lt;/h3&gt;

&lt;p&gt;You can create a link by placing the link name inside  square brackets &lt;code&gt;[]&lt;/code&gt;and then right next to that add the actual link inside parenthesis &lt;code&gt;()&lt;/code&gt;&lt;br&gt;
Image and site links use a similar syntax&lt;/p&gt;

&lt;p&gt;Markdown for a site link:&lt;br&gt;
&lt;code&gt;[Microsoft Learn](https://learn.microsoft.com/en-us/?wt.mc_id=studentamb_201445)&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Result:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;a href="https://learn.microsoft.com/en-us/?wt.mc_id=studentamb_201445" rel="noopener noreferrer"&gt;Microsoft Learn&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Markdown for an image link:&lt;br&gt;
&lt;code&gt;![Link an image.](https://learn.com/azure-devops/shared/media/mara.png)&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Result:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--wLaDKFo---/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://encrypted-tbn0.gstatic.com/images%3Fq%3Dtbn:ANd9GcQzk92qOx7c5k5fybjVbUkwg6BGW_ptjgID9A%26s" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--wLaDKFo---/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://encrypted-tbn0.gstatic.com/images%3Fq%3Dtbn:ANd9GcQzk92qOx7c5k5fybjVbUkwg6BGW_ptjgID9A%26s" alt="Link an image." width="277" height="182"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Variants🔀
&lt;/h2&gt;

&lt;p&gt;Websites like &lt;em&gt;GitHub&lt;/em&gt;, &lt;em&gt;Reddit&lt;/em&gt; and &lt;em&gt;Stack Exchange&lt;/em&gt; use variants of Markdown to make discussions between users easier.&lt;/p&gt;

&lt;p&gt;In this blog post we will focus on &lt;strong&gt;GitHub Flavored Markdown&lt;/strong&gt; or &lt;strong&gt;GFM&lt;/strong&gt; as it's sometimes referred to.&lt;/p&gt;

&lt;h2&gt;
  
  
  GitHub Flavored Markdown
&lt;/h2&gt;

&lt;p&gt;Overtime, GitHub has added improvements to the main markdown language so much so that this enhanced version is known as &lt;a href="https://github.github.com/gfm/" rel="noopener noreferrer"&gt;&lt;strong&gt;GitHub Flavor Markdown (GFM)&lt;/strong&gt;&lt;/a&gt;&lt;br&gt;
GFM is only supported on GitHub and extends Markdown's capabilities to support the following additional features:&lt;/p&gt;

&lt;h3&gt;
  
  
  1. Tables
&lt;/h3&gt;

&lt;p&gt;By default, the columns are going to left align.&lt;br&gt;
&lt;code&gt;:----:&lt;/code&gt; will align the column at the center and &lt;code&gt;----:&lt;/code&gt; will align the column to the right&lt;br&gt;
Below is some syntax for a table with 3 columns and 3 rows.&lt;br&gt;
&lt;code&gt;`&lt;br&gt;
| Header | Header | Header |&lt;br&gt;
|--------|--------|--------|&lt;br&gt;
| Cell | Cell | Cell |&lt;br&gt;
| Cell | Cell | Cell |&lt;br&gt;
| Cell | Cell | Cell |&lt;br&gt;
`&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Result:&lt;/p&gt;

&lt;blockquote&gt;
&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Header&lt;/th&gt;
&lt;th&gt;Header&lt;/th&gt;
&lt;th&gt;Header&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Cell&lt;/td&gt;
&lt;td&gt;Cell&lt;/td&gt;
&lt;td&gt;Cell&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Cell&lt;/td&gt;
&lt;td&gt;Cell&lt;/td&gt;
&lt;td&gt;Cell&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Cell&lt;/td&gt;
&lt;td&gt;Cell&lt;/td&gt;
&lt;td&gt;Cell&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  2. Task List
&lt;/h3&gt;

&lt;p&gt;This is a checklist&lt;br&gt;
The &lt;strong&gt;x&lt;/strong&gt; between the square brackets is for a &lt;em&gt;checked task&lt;/em&gt; and the &lt;strong&gt;space&lt;/strong&gt; is for an &lt;em&gt;unchecked box&lt;/em&gt;.&lt;br&gt;
Below is some syntax:&lt;br&gt;
`&lt;code&gt;&lt;/code&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;[x] First

&lt;ul&gt;
&lt;li&gt;[x] One&lt;/li&gt;
&lt;li&gt;[x] Two
&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;[ ] Second&lt;/li&gt;

&lt;li&gt;[ ] Third
&lt;code&gt;&lt;/code&gt;`&lt;/li&gt;

&lt;/ul&gt;

&lt;p&gt;Result:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fmo39uxh5y2c4zb7xonr9.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fmo39uxh5y2c4zb7xonr9.png" alt="Image description" width="240" height="175"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  3. Alert Syntax
&lt;/h3&gt;

&lt;p&gt;Below is the syntax and the equivalent output:&lt;br&gt;
`&lt;code&gt;&lt;/code&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;[!NOTE]&lt;br&gt;
A note.&lt;/p&gt;

&lt;p&gt;[!IMPORTANT]&lt;br&gt;
Something important.&lt;/p&gt;

&lt;p&gt;[!WARNING]&lt;br&gt;
A warning.&lt;br&gt;
&lt;code&gt;&lt;/code&gt;`&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Result:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fj7kk7gwckiy3encum054.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fj7kk7gwckiy3encum054.png" alt="Image description" width="260" height="327"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  4. Special Additions
&lt;/h3&gt;

&lt;p&gt;You can &lt;strong&gt;drag&lt;/strong&gt;, &lt;strong&gt;drop&lt;/strong&gt; or &lt;strong&gt;paste&lt;/strong&gt; the following file formats: &lt;em&gt;.png, .gif, .jpg, .jpeg, .svg, .log, .docx, .pptx., .xlsx, .txt, .pdf, .zip, .gz, .mp4, .mov, .webm, .tgz&lt;/em&gt;. These components though have a size limit of &lt;strong&gt;50 mb&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;#&lt;/strong&gt; in &lt;em&gt;issues&lt;/em&gt;, &lt;em&gt;discussions&lt;/em&gt;, and &lt;em&gt;pull requests&lt;/em&gt; will let you refer to another issue and &lt;strong&gt;@&lt;/strong&gt; will pull up the names of people on your projects.&lt;/p&gt;

&lt;p&gt;In pull requests, issues and discussions, you can also refer to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;colors (rgb, hex, hsl) e.g. &lt;strong&gt;fb10cd2&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Emojis starting with : e.g. &lt;strong&gt;:t-rex&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Escape with *&lt;em&gt;*&lt;/em&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  5.Syntax Highlighting for popular languages
&lt;/h3&gt;

&lt;p&gt;Just format a code block as you would using three backticks, but on the opening backticks, specify the language used in the code block.&lt;br&gt;
Specifying the language will add the syntax highlighting feature.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Without Syntax Highlighting&lt;/strong&gt;&lt;br&gt;
&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fvgca8hg0pctxsbzcfn8p.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fvgca8hg0pctxsbzcfn8p.png" alt="Image description" width="207" height="132"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Result:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fatv0k76yaibf5jc4mg66.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fatv0k76yaibf5jc4mg66.png" alt="Image description" width="248" height="122"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;With Syntax Highlighting&lt;/strong&gt;&lt;br&gt;
&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F4pbon4ubyqcfnpur9c18.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F4pbon4ubyqcfnpur9c18.png" alt="Image description" width="233" height="136"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Result:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ffubngqwhb3cv6fe3h5ho.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ffubngqwhb3cv6fe3h5ho.png" alt="Image description" width="246" height="124"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  6. Slash Commands
&lt;/h3&gt;

&lt;p&gt;Use slash commands to save time by reducing the typing required to create complex markdown.&lt;br&gt;
You can use slash commands in any description or comment field in &lt;em&gt;issues&lt;/em&gt;, &lt;em&gt;pull requests&lt;/em&gt; or &lt;em&gt;discussions&lt;/em&gt; where that slash command is supported.&lt;/p&gt;

&lt;h4&gt;
  
  
  Examples
&lt;/h4&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;/code&lt;/strong&gt; -&amp;gt; Inserts a markdown code block. You choose the language.&lt;br&gt;
&lt;strong&gt;/details&lt;/strong&gt; -&amp;gt; Inserts a collapsible detail area. You choose the title and content.&lt;br&gt;
&lt;strong&gt;/table&lt;/strong&gt; -&amp;gt; Inserts a markdown table. You choose the number of columns and rows.&lt;br&gt;
&lt;strong&gt;/tasklist&lt;/strong&gt; -&amp;gt; Inserts a task list. This command only works in an issue description.&lt;br&gt;
&lt;strong&gt;/saved-replies&lt;/strong&gt; -&amp;gt; Inserts a saved reply. You choose from the saved replies for your user account.&lt;br&gt;
&lt;strong&gt;/template&lt;/strong&gt; -&amp;gt; Shows all of the templates in the repository. This command works for &lt;em&gt;issue templates&lt;/em&gt; and &lt;em&gt;pull request templates&lt;/em&gt;.&lt;/p&gt;
&lt;/blockquote&gt;

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

&lt;p&gt;As the demand for high-quality, well-structured documentation continues to grow, Markdown offers a powerful solution. It not only enhances the quality of your documentation but also make the writing process more efficient and enjoyable.&lt;/p&gt;

&lt;p&gt;For student developers and content creators, embracing the use of Markdown can significantly improve your productivity and the overall quality of your work.&lt;/p&gt;

&lt;p&gt;Ready to take your Markdown documentation to the next level? Start by exploring this &lt;a href="https://learn.microsoft.com/training/modules/communicate-using-markdown/?wt.mc_id=studentamb_201445" rel="noopener noreferrer"&gt;Microsoft Learn course&lt;/a&gt; and practice your learnings by taking this &lt;a href="https://learn.microsoft.com/en-us/training/modules/communicate-using-markdown/3-communicating-using-markdown?wt.mc_id=studentamb_201445" rel="noopener noreferrer"&gt;exercise&lt;/a&gt; on GitHub.&lt;/p&gt;

&lt;h2&gt;
  
  
  Next Up
&lt;/h2&gt;

&lt;p&gt;This is the first off a &lt;strong&gt;5-part blog series&lt;/strong&gt;, recurring monthly, where we’ll explore GitHub like never before. Each post will build on the last, aiming to equip you with a profound understanding of GitHub, supercharging your project efficiency and collaboration skills.💪&lt;/p&gt;

&lt;p&gt;In the next blog post, we will delve into &lt;strong&gt;GitHub Issues&lt;/strong&gt;.&lt;br&gt;
See you then!&lt;/p&gt;

</description>
      <category>markdown</category>
      <category>github</category>
      <category>documentation</category>
      <category>contentformatting</category>
    </item>
  </channel>
</rss>
