<?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: Maniruzzaman Akash</title>
    <description>The latest articles on DEV Community by Maniruzzaman Akash (@maniruzzamanakash).</description>
    <link>https://dev.to/maniruzzamanakash</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%2F273577%2Fca4bab38-35ac-4afe-a8fa-c7805e655855.jpeg</url>
      <title>DEV Community: Maniruzzaman Akash</title>
      <link>https://dev.to/maniruzzamanakash</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/maniruzzamanakash"/>
    <language>en</language>
    <item>
      <title>Livewire Admin UX vs Classic WordPress Admin for Power Users</title>
      <dc:creator>Maniruzzaman Akash</dc:creator>
      <pubDate>Thu, 01 Oct 2026 04:10:02 +0000</pubDate>
      <link>https://dev.to/maniruzzamanakash/livewire-admin-ux-vs-classic-wordpress-admin-for-power-users-1plb</link>
      <guid>https://dev.to/maniruzzamanakash/livewire-admin-ux-vs-classic-wordpress-admin-for-power-users-1plb</guid>
      <description>&lt;p&gt;You live in the admin. Lists, filters, bulk edits, keyboard shortcuts, and muscle memory matter more than marketing screenshots. This piece compares &lt;strong&gt;Livewire admin UX&lt;/strong&gt; (including Livewire-based admin kits and Filament-style Livewire UIs) with &lt;strong&gt;classic WordPress admin&lt;/strong&gt; for power users who ship content and ops work every day.&lt;/p&gt;

&lt;p&gt;It is an admin workflow comparison, not a general Laravel vs WordPress redo. Here we stay on screens, menus, AJAX habits, reactivity, and migration friction for WP power users.&lt;/p&gt;

&lt;p&gt;Disclosure: &lt;a href="https://laradashboard.com" rel="noopener noreferrer"&gt;LaraDashboard&lt;/a&gt; is our open-source Laravel admin and CMS. We recommend it when you want a ready Laravel admin shell with Spatie-backed roles and product modules. Much of the Livewire side below also applies to Filament and custom Livewire panels. We say so when a claim is about LaraDashboard specifically.&lt;/p&gt;

&lt;h2&gt;
  
  
  The short answer
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Classic wp-admin&lt;/strong&gt; is a full-page admin with deep plugin UI, admin AJAX patterns, and decades of power-user muscle memory. You navigate menus, submit forms, wait for reloads, and stitch workflows across plugin screens.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Livewire admin UX&lt;/strong&gt; keeps you in Laravel Blade (or kit pages) while components re-render after server round-trips without a full page reload. Filament-style resources, custom Livewire forms, and LaraDashboard admin screens share that feel: filters update, tables refresh, and modals open without leaving the Laravel app for a separate SPA stack.&lt;/p&gt;

&lt;p&gt;Neither is "done" by default. wp-admin power comes from plugins and custom admin code. Livewire power comes from components you own, kit conventions you accept, and policies you actually wire. Pick based on how your operators work, not on blog hype.&lt;/p&gt;

&lt;h2&gt;
  
  
  Classic WordPress admin: strengths for power users
&lt;/h2&gt;

&lt;p&gt;wp-admin still wins in places power users care about:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Ubiquity.&lt;/strong&gt; Contractors already know Posts, Pages, Media, and Users. Training cost is low for content shops.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Plugin UI density.&lt;/strong&gt; Need SEO fields, redirects, forms, CRM lite, and membership gates? There is a screen for each, often yesterday.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Admin AJAX culture.&lt;/strong&gt; Heartbeat, meta box saves, and admin-ajax actions let parts of a screen update without a full reload when authors invest in it.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Bulk tools.&lt;/strong&gt; Quick Edit, bulk edit, and media library workflows are mature for editorial teams.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Escape hatches.&lt;/strong&gt; Hooks and &lt;code&gt;add_menu_page&lt;/code&gt; let you inject almost anything into the left rail.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Those strengths come with friction: full page loads as the default, growing menus, uneven plugin UI, and workflows that depend on memorizing which plugin owns which field.&lt;/p&gt;

&lt;p&gt;If your power users are WordPress natives and your product &lt;em&gt;is&lt;/em&gt; content ops on WP, staying can be rational. If your power users are product operators who need one coherent app, the plugin menu model starts to tax every sprint.&lt;/p&gt;

&lt;h2&gt;
  
  
  Livewire admin UX: what feels different
&lt;/h2&gt;

&lt;p&gt;Livewire (and Filament-style Livewire UIs) change the day-to-day feel:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Reactivity without a separate SPA.&lt;/strong&gt; You stay in Laravel. Components call server methods. The DOM updates. You do not maintain a React admin unless you want one.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Forms that validate in place.&lt;/strong&gt; Failed rules re-render the same screen with errors next to fields. No "return to form with old input" dance you hand-roll on every controller.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Tables that filter without navigation.&lt;/strong&gt; Search, sort, and pagination can update the list region while the shell stays put.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Modals and slides for create/edit.&lt;/strong&gt; Power users keep list context. That alone reduces lost filters after "open edit in new tab."&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Shared auth and policies.&lt;/strong&gt; The same Gate, Policy, or Spatie permission that protects a route protects the Livewire action if you wire it.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Filament leans hard into this model with resources, form builders, and table builders on Livewire. Custom Livewire admin pages give you the same primitives with more layout freedom. LaraDashboard gives you an admin shell and module screens in a Laravel CMS context. The interaction pattern is the shared idea: server-driven UI with SPA-ish feedback.&lt;/p&gt;

&lt;h2&gt;
  
  
  Cheat sheet: Livewire admin vs classic wp-admin
&lt;/h2&gt;

&lt;p&gt;Compare along the axes power users feel:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Default navigation:&lt;/strong&gt; Livewire kit shell + resource pages vs wp-admin left menu + plugin submenus.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Form submit feel:&lt;/strong&gt; Component re-render / wire submit vs full postback or plugin AJAX of uneven quality.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;List filtering:&lt;/strong&gt; Livewire table state vs admin list tables + plugin columns.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Related records:&lt;/strong&gt; Relation managers / nested components vs meta boxes + linked CPT screens.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Extensibility unit:&lt;/strong&gt; Livewire components and kit plugins vs WP hooks and admin pages.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Consistency across features:&lt;/strong&gt; High if you stay in one kit vs variable per plugin author.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Training curve for WP veterans:&lt;/strong&gt; New mental model (components, resources) vs familiar chrome with plugin surprises.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Best fit:&lt;/strong&gt; Product ops inside Laravel vs content ops inside the WP ecosystem.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Use this sheet in stakeholder talks. Do not pretend every Filament screen beats every WP plugin screen. A polished WP admin for a newspaper can outpace a neglected Livewire prototype. Ownership and polish decide the winner.&lt;/p&gt;

&lt;h2&gt;
  
  
  What breaks for WordPress power users who migrate
&lt;/h2&gt;

&lt;p&gt;Expect friction. Name it early so stakeholders do not call the new admin "broken" when it is only unfamiliar.&lt;/p&gt;

&lt;p&gt;Common breaks:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Quick Edit nostalgia.&lt;/strong&gt; Inline edit of five fields from the list may need a Livewire modal or row action you must build.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Plugin field maps.&lt;/strong&gt; SEO, redirects, and membership fields lived on the post screen. In Laravel they become model attributes, related models, or module settings. Operators must learn new homes.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Media library habits.&lt;/strong&gt; WP media modal workflows are unique. Laravel media disks and pickers feel different. Plan a media story before cutover.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Role names and caps.&lt;/strong&gt; WP capabilities do not map 1:1 to Spatie permissions. Rebuild the matrix on purpose.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Admin CSS muscle memory.&lt;/strong&gt; Spacing, notices, and "where is the Publish box?" all change. Provide a one-page cheat sheet for editors.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Cron and background jobs.&lt;/strong&gt; WP cron plus plugin crons become Laravel queues and schedulers. Ops runbooks must change.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Permalink and preview mental models.&lt;/strong&gt; Preview and draft flows are app-specific. Rehearse them with real editors.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;None of these mean Livewire is worse. They mean migration is a UX project, not only a data project.&lt;/p&gt;

&lt;h2&gt;
  
  
  When Livewire admin UX is the better power-user fit
&lt;/h2&gt;

&lt;p&gt;Lean Livewire (Filament-style or custom) when:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The admin is the product UI for ops, not a side CMS&lt;/li&gt;
&lt;li&gt;You want one auth, one validation style, and one deploy train with the Laravel app&lt;/li&gt;
&lt;li&gt;You are tired of plugin UI drift and need coherent tables/forms&lt;/li&gt;
&lt;li&gt;You already run Laravel for the API or customer app and do not want a second admin stack&lt;/li&gt;
&lt;li&gt;Module packaging and Spatie roles matter more than WP plugin directories&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;LaraDashboard fits when you want that Laravel admin/CMS shell with modules and roles, not when you only need a Filament resource for one model. Filament fits when the admin kit should own UI conventions. Custom Livewire fits when neither kit should dictate layout.&lt;/p&gt;

&lt;h2&gt;
  
  
  FAQ
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Is Livewire the same as a React admin SPA?
&lt;/h3&gt;

&lt;p&gt;No. Livewire keeps rendering logic on the server and patches HTML. A React SPA keeps more UI state in the browser and talks to APIs. Livewire can feel SPA-like for forms and tables without a separate frontend build for every admin screen. Heavy client-only interactions may still need Alpine, JS, or a true SPA.&lt;/p&gt;

&lt;h3&gt;
  
  
  Can Filament replace wp-admin for editors?
&lt;/h3&gt;

&lt;p&gt;For many ops and internal tools, yes. For editorial teams who depend on the WP block editor and a specific plugin stack, not as a drop-in. Plan content editing separately from ops CRUD. Match LaraDashboard (or any Laravel CMS) to your editor workflow before promising parity.&lt;/p&gt;

&lt;h3&gt;
  
  
  Will my WP keyboard shortcuts carry over?
&lt;/h3&gt;

&lt;p&gt;Almost never 1:1. Budget a short training doc. Focus on list filters, save, and bulk actions first. Shortcuts are secondary to clear primary actions.&lt;/p&gt;

&lt;h3&gt;
  
  
  Does Livewire remove the need for admin AJAX skills?
&lt;/h3&gt;

&lt;p&gt;It replaces many custom AJAX endpoints with component actions. You still need to authorize every action, validate input, and keep queries fast. The skill shifts from "write admin-ajax handlers" to "design Livewire components responsibly."&lt;/p&gt;

&lt;h3&gt;
  
  
  How does LaraDashboard relate to Livewire and Filament?
&lt;/h3&gt;

&lt;p&gt;LaraDashboard is our Laravel admin and CMS product shell with modules and Spatie roles. Filament is a popular admin kit built on Livewire. You typically choose a primary admin approach rather than stacking every kit. We disclose our product interest and still recommend Filament when a Filament-centered panel is the better ownership model for your team.&lt;/p&gt;

&lt;h2&gt;
  
  
  Final verdict
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Livewire admin UX&lt;/strong&gt; gives power users reactivity, in-place validation, and coherent table/form patterns without leaving Laravel for a second SPA. &lt;strong&gt;Classic WordPress admin&lt;/strong&gt; still wins on ecosystem familiarity, plugin density, and editorial muscle memory when your product lives in that world.&lt;/p&gt;

&lt;p&gt;The deciding question is not "which is modern?" It is "which admin model matches how our operators work, and who owns the screens after launch?" If plugin menus and uneven AJAX define your pain, Livewire-based admin kits or a LaraDashboard-style Laravel shell are worth a serious prototype. If WP power users are your scarce resource and the plugin stack is under control, invest in wp-admin clarity before rewriting.&lt;/p&gt;

&lt;p&gt;If you want a Laravel admin and CMS path with modules and Spatie-backed roles, try &lt;a href="https://laradashboard.com" rel="noopener noreferrer"&gt;LaraDashboard&lt;/a&gt;. Prototype your top three operator tasks on a Livewire screen, and only then commit a migration checklist for content and media.&lt;/p&gt;

</description>
      <category>laravel</category>
      <category>livewire</category>
      <category>wordpress</category>
      <category>admin</category>
    </item>
    <item>
      <title>Wire Cursor and Claude to Your Laravel CMS with MCP (Skip the Paste Loop)</title>
      <dc:creator>Maniruzzaman Akash</dc:creator>
      <pubDate>Mon, 28 Sep 2026 04:13:42 +0000</pubDate>
      <link>https://dev.to/maniruzzamanakash/wire-cursor-and-claude-to-your-laravel-cms-with-mcp-skip-the-paste-loop-1ef7</link>
      <guid>https://dev.to/maniruzzamanakash/wire-cursor-and-claude-to-your-laravel-cms-with-mcp-skip-the-paste-loop-1ef7</guid>
      <description>&lt;p&gt;You already draft in Cursor or Claude. Then you open the CMS admin, paste HTML, hunt for the right status, and hope the featured image path is right. The agent wrote the words. You still did the busywork.&lt;/p&gt;

&lt;p&gt;This guide is about connecting AI coding agents (Cursor, Claude Desktop, and similar MCP clients) to a real Laravel CMS through named tools. Here we stay on content ops: create and update posts, list tickets, work contacts, and keep a human gate on publish.&lt;/p&gt;

&lt;p&gt;Disclosure: &lt;a href="https://laradashboard.com" rel="noopener noreferrer"&gt;LaraDashboard&lt;/a&gt; is our open-source Laravel admin and CMS. We ship an MCP server with tools for posts, media, tickets, CRM, forms, and ops. We recommend it when you want agents talking to your CMS through named tools and permissions, not through brittle copy-paste.&lt;/p&gt;

&lt;h2&gt;
  
  
  The short answer
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;MCP&lt;/strong&gt; (Model Context Protocol) lets an agent discover tools with schemas and call them. Cursor and Claude act as clients. Your LaraDashboard instance exposes a server. The agent can draft a post into pending status, list open tickets, or pull a daily briefing without you leaving the editor.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Safer ops&lt;/strong&gt; mean the agent prepares. You approve anything that goes live: publish, send email, delete, or attach media you have not checked. Token abilities and Laravel permissions still apply. An agent is not a superuser because it talks MCP.&lt;/p&gt;

&lt;p&gt;Vs ChatGPT paste workflows: paste is fine for a one-off rewrite. It fails when you need post IDs, term IDs, ticket threads, or a consistent status flow. MCP keeps the agent on the same records your admin uses.&lt;/p&gt;

&lt;h2&gt;
  
  
  What you connect: client, server, token
&lt;/h2&gt;

&lt;p&gt;Three pieces matter in practice.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;MCP client.&lt;/strong&gt; Cursor, Claude Desktop, or another host that speaks MCP.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;MCP server.&lt;/strong&gt; LaraDashboard exposes tools grouped by Content, CRM, Forms, Email, Operations, and Discovery. Each tool has a name, description, and parameter schema.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Auth.&lt;/strong&gt; You create an MCP token with abilities (for example &lt;code&gt;mcp:posts.read&lt;/code&gt;, &lt;code&gt;mcp:posts.write&lt;/code&gt;). Laravel permissions on the user still gate actions like &lt;code&gt;post.create&lt;/code&gt; or &lt;code&gt;ticket.edit&lt;/code&gt;.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;If a tool is missing, check installed modules and token abilities with &lt;code&gt;list-mcp-tools&lt;/code&gt;, &lt;code&gt;list-modules&lt;/code&gt;, and &lt;code&gt;get-site-health&lt;/code&gt;. Do not assume every demo screenshot matches your install.&lt;/p&gt;

&lt;h2&gt;
  
  
  Agent CMS vs paste chat
&lt;/h2&gt;

&lt;p&gt;Compare the job shapes teams actually run:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Draft a blog post:&lt;/strong&gt; Agent calls &lt;code&gt;create-post&lt;/code&gt; with title, HTML content, excerpt, and &lt;code&gt;status=pending&lt;/code&gt; vs you paste by hand.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Revise before publish:&lt;/strong&gt; Agent calls &lt;code&gt;update-post&lt;/code&gt; on a known &lt;code&gt;post_id&lt;/code&gt; vs you hunt the draft in the admin list.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Assign category:&lt;/strong&gt; Agent calls &lt;code&gt;assign-post-terms&lt;/code&gt; with term IDs from &lt;code&gt;list-terms&lt;/code&gt; vs you click category checkboxes.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Triage support:&lt;/strong&gt; Agent calls &lt;code&gt;list-tickets&lt;/code&gt; / &lt;code&gt;get-ticket&lt;/code&gt; / &lt;code&gt;reply-ticket&lt;/code&gt; vs you retype context into chat.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;CRM follow-up:&lt;/strong&gt; Agent lists contacts or deals, then drafts a note via activity tools vs you copy CRM fields into a chat window.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Ops pulse:&lt;/strong&gt; Agent calls &lt;code&gt;get-daily-briefing&lt;/code&gt; or &lt;code&gt;get-site-health&lt;/code&gt; vs you open five admin menus before standup.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Paste chat has no post ID. MCP does.&lt;/p&gt;

&lt;h2&gt;
  
  
  Content tools agents use every week
&lt;/h2&gt;

&lt;p&gt;These Content tools show up in real editorial loops:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;list-posts&lt;/code&gt; and &lt;code&gt;get-post&lt;/code&gt; for inventory and QA&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;create-post&lt;/code&gt; for draft or pending posts&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;update-post&lt;/code&gt; for content, excerpt, title, status, and publish date&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;assign-post-terms&lt;/code&gt; after &lt;code&gt;list-terms&lt;/code&gt; so categories and tags stay consistent&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;generate-seo-meta&lt;/code&gt; when you want a suggested meta title and description (still review soft marketing language)&lt;/li&gt;
&lt;li&gt;Media tools (&lt;code&gt;list-media&lt;/code&gt;, &lt;code&gt;upload-media&lt;/code&gt;, &lt;code&gt;attach-featured-image&lt;/code&gt;). Treat media attach as a human-gated step when storage is flaky.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A practical pattern:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Agent drafts Markdown locally.&lt;/li&gt;
&lt;li&gt;You convert to clean HTML (or the agent does under review).&lt;/li&gt;
&lt;li&gt;Agent creates the post as &lt;strong&gt;pending&lt;/strong&gt; or &lt;strong&gt;draft&lt;/strong&gt; with &lt;code&gt;include_images=false&lt;/code&gt; when you do not want AI header images.&lt;/li&gt;
&lt;li&gt;SEO pass and human review happen on the pending post.&lt;/li&gt;
&lt;li&gt;Only after approval does someone set &lt;code&gt;status=published&lt;/code&gt;.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The agent speeds the boring parts. You keep the publish button.&lt;/p&gt;

&lt;h2&gt;
  
  
  Tickets, CRM, and forms without tab chaos
&lt;/h2&gt;

&lt;p&gt;When the same CMS holds support and CRM modules, the agent can stay in Cursor while you triage:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Tickets: &lt;code&gt;list-tickets&lt;/code&gt;, &lt;code&gt;get-ticket&lt;/code&gt;, &lt;code&gt;reply-ticket&lt;/code&gt;, &lt;code&gt;assign-ticket&lt;/code&gt;, &lt;code&gt;update-ticket&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Contacts and deals: &lt;code&gt;list-contacts&lt;/code&gt;, &lt;code&gt;get-contact&lt;/code&gt;, &lt;code&gt;create-contact&lt;/code&gt;, &lt;code&gt;list-deals&lt;/code&gt;, &lt;code&gt;update-deal&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Forms: &lt;code&gt;list-form-submissions&lt;/code&gt;, &lt;code&gt;mark-form-submission-viewed&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Email: list/get templates; &lt;code&gt;send-email&lt;/code&gt; only when you mean to send&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Keep write actions behind confirmation. Draft a public ticket reply in the agent. Send only after you read it. Same rule for CRM stage moves and outbound email.&lt;/p&gt;

&lt;h2&gt;
  
  
  Safe defaults and hard stops
&lt;/h2&gt;

&lt;p&gt;Safe when tools and tokens are scoped:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Read lists and single records&lt;/li&gt;
&lt;li&gt;Create &lt;strong&gt;pending&lt;/strong&gt; or &lt;strong&gt;draft&lt;/strong&gt; posts&lt;/li&gt;
&lt;li&gt;Update draft content before publish&lt;/li&gt;
&lt;li&gt;Draft ticket replies as internal notes first&lt;/li&gt;
&lt;li&gt;Pull &lt;code&gt;get-daily-briefing&lt;/code&gt; for standup&lt;/li&gt;
&lt;li&gt;Discover tools with &lt;code&gt;list-mcp-tools&lt;/code&gt; before guessing names&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Team rules that help:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Never publish without a human "yes" in the thread.&lt;/li&gt;
&lt;li&gt;Never delete posts or media unless named and confirmed.&lt;/li&gt;
&lt;li&gt;Never send email or public ticket replies without a quoted preview.&lt;/li&gt;
&lt;li&gt;Prefer &lt;code&gt;include_images=false&lt;/code&gt; unless you want generated headers.&lt;/li&gt;
&lt;li&gt;Log &lt;code&gt;post_id&lt;/code&gt;, slug, and status so QA can check the live URL.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Do not let an unsupervised agent flip many posts to published, invent metrics or customer quotes, bypass Spatie roles with a god-token, or treat MCP as a substitute for a public REST API. Scope tokens like you scope deploy keys.&lt;/p&gt;

&lt;h2&gt;
  
  
  Cursor versus Claude for CMS work
&lt;/h2&gt;

&lt;p&gt;Both can be MCP clients. The useful differences are workflow habits.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Cursor&lt;/strong&gt; fits when the draft lives next to code: article Markdown in a repo, editorial notes, PR review. The agent edits files, then calls MCP to create the pending post.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Claude Desktop&lt;/strong&gt; fits when the operator lives in conversation: "list open high-priority tickets," "draft a reply for ticket 42," "create a pending post from this outline."&lt;/p&gt;

&lt;p&gt;The LaraDashboard tool surface is the same either way. Pick the client your team will actually leave open.&lt;/p&gt;

&lt;h2&gt;
  
  
  A concrete day with and without MCP
&lt;/h2&gt;

&lt;p&gt;Without MCP:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Outline in chat&lt;/li&gt;
&lt;li&gt;Paste draft into Docs or the CMS&lt;/li&gt;
&lt;li&gt;Fix formatting that broke on paste&lt;/li&gt;
&lt;li&gt;Open admin to set category and excerpt&lt;/li&gt;
&lt;li&gt;Open tickets in another tab&lt;/li&gt;
&lt;li&gt;Forget which draft was the latest&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;With LaraDashboard MCP:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Outline and draft in the agent with your style rules open&lt;/li&gt;
&lt;li&gt;Agent creates pending post via &lt;code&gt;create-post&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;You review in admin or via &lt;code&gt;get-post&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Agent assigns your category via &lt;code&gt;assign-post-terms&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Agent lists related tickets if the post answers support themes&lt;/li&gt;
&lt;li&gt;You publish after review&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;You still write. You still judge tone. You skip the scavenger hunt.&lt;/p&gt;

&lt;h2&gt;
  
  
  Setup checklist
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;Install and enable the MCP-related modules on your LaraDashboard site.&lt;/li&gt;
&lt;li&gt;Create a dedicated MCP token with least privilege for the job.&lt;/li&gt;
&lt;li&gt;Connect Cursor or Claude as a client using your host's MCP config.&lt;/li&gt;
&lt;li&gt;Call &lt;code&gt;list-mcp-tools&lt;/code&gt; and &lt;code&gt;get-site-health&lt;/code&gt; before the first write.&lt;/li&gt;
&lt;li&gt;Run a dry run: &lt;code&gt;create-post&lt;/code&gt; with &lt;code&gt;status=pending&lt;/code&gt; and a throwaway title.&lt;/li&gt;
&lt;li&gt;Add team rules: publish only on approval; media attach policy; no silent deletes.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Prefer official Cursor or Claude MCP docs for connection JSON. Do not paste secrets into public repos.&lt;/p&gt;

&lt;h2&gt;
  
  
  Failure cases to expect
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Payload size limits.&lt;/strong&gt; Very large HTML bodies may fail on create/update. Keep a full Markdown source.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Soft SEO copy.&lt;/strong&gt; &lt;code&gt;generate-seo-meta&lt;/code&gt; can return marketing-heavy titles. Prefer a manual meta title when that happens.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Missing tools.&lt;/strong&gt; Disabled modules hide CRM or forms tools. Check &lt;code&gt;list-modules&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Permission errors.&lt;/strong&gt; Token ability present but user permission missing (or the reverse).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Media storage flakes.&lt;/strong&gt; If featured-image attach fails, upload manually.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  FAQ
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Is LaraDashboard MCP the same as a public REST API?&lt;/strong&gt; No. MCP is for assistant clients with tool schemas. A public product API still wants Sanctum, versioning, and docs. Use MCP for operator agents. Use REST for apps that are not chat clients.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Can the agent publish without me?&lt;/strong&gt; Only if your token allows it and you allow the call. Prefer pending first, human review, then publish.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Will agents replace our editors?&lt;/strong&gt; No. Agents draft, list, and prep. Editors own voice, accuracy, disclosure, and publish.&lt;/p&gt;

&lt;h2&gt;
  
  
  Final verdict
&lt;/h2&gt;

&lt;p&gt;If your team already writes in Cursor or Claude, connecting those agents to LaraDashboard MCP is a practical next step. You get pending posts, ticket context, and CRM reads without turning ChatGPT into a copy-paste modem. You keep humans on publish, send, and delete.&lt;/p&gt;

&lt;p&gt;Skip MCP if you publish once a month and paste is fine. Adopt it when content and support share one Laravel CMS and tab-hopping is the tax you pay every day.&lt;/p&gt;

&lt;p&gt;If you want that path with MCP tools for agents, try &lt;a href="https://laradashboard.com" rel="noopener noreferrer"&gt;LaraDashboard&lt;/a&gt;. Connect a least-privilege token, create one pending post on purpose, and only then wire publish into your editorial checklist.&lt;/p&gt;

</description>
      <category>laravel</category>
      <category>mcp</category>
      <category>ai</category>
      <category>cms</category>
    </item>
    <item>
      <title>Role-Based Access for Laravel Client Portals (Spatie + Policies)</title>
      <dc:creator>Maniruzzaman Akash</dc:creator>
      <pubDate>Thu, 24 Sep 2026 04:25:41 +0000</pubDate>
      <link>https://dev.to/maniruzzamanakash/role-based-access-for-laravel-client-portals-spatie-policies-oo8</link>
      <guid>https://dev.to/maniruzzamanakash/role-based-access-for-laravel-client-portals-spatie-policies-oo8</guid>
      <description>&lt;p&gt;You ship a client portal next to your admin panel. Staff need CMS and CRM tools. Clients need their projects, invoices, tickets, and files.&lt;/p&gt;

&lt;p&gt;Someone copies the staff role matrix into the portal. A client hits &lt;code&gt;/admin&lt;/code&gt;, or changes an ID and reads another account's ticket.&lt;/p&gt;

&lt;p&gt;This guide is about portal RBAC in Laravel: how to separate portal users from staff, how Spatie laravel-permission fits that split, and where policies still own "this invoice belongs to that account." It is not a generic Spatie tutorial. For staff-admin UI, middleware, and impersonation, use the companion staff guide on LaraDashboard. Here we stay on the portal surface.&lt;/p&gt;

&lt;p&gt;Disclosure up front: we build &lt;strong&gt;LaraDashboard&lt;/strong&gt;, an open-source Laravel admin and CMS. We recommend it for the staff half when you want Spatie-backed roles, modules, and activity logging in one admin. You still own portal routes, membership, and account-scoped policies. The same patterns apply if you use Filament, Nova, or a custom admin.&lt;/p&gt;

&lt;h2&gt;
  
  
  Staff RBAC is not portal RBAC
&lt;/h2&gt;

&lt;p&gt;Staff admin RBAC answers which internal users can manage content, settings, users, and modules.&lt;/p&gt;

&lt;p&gt;Client portal RBAC answers which external users can view or act on their resources, and never on staff-only surfaces.&lt;/p&gt;

&lt;p&gt;Spatie gives you roles, permissions, middleware, Blade directives, and optional multiple guards. Laravel policies still decide resource ownership. "Logged in" is not "trusted like staff."&lt;/p&gt;

&lt;p&gt;If the portal is a thin "view my invoices" page, a few permissions plus policies may be enough. If you have client admins, viewers, partners, and staff impersonation, write the portal role map before you invent another &lt;code&gt;is_admin&lt;/code&gt; flag.&lt;/p&gt;

&lt;h2&gt;
  
  
  Portal users are not staff with fewer checkboxes
&lt;/h2&gt;

&lt;p&gt;The common shortcut is one &lt;code&gt;users&lt;/code&gt; table and one role list: Super Admin, Admin, Editor, Client. You hide admin nav with &lt;code&gt;@can&lt;/code&gt; and hope clients never hit &lt;code&gt;/admin&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;That fails in three predictable ways:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Route leakage.&lt;/strong&gt; A guessed admin URL still runs if middleware only checks &lt;code&gt;auth&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Permission name collisions.&lt;/strong&gt; &lt;code&gt;projects.view&lt;/code&gt; means "all projects" for staff and "mine" for clients unless policies enforce ownership.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Role assignment mistakes.&lt;/strong&gt; Support grants a temporary staff role during debugging and forgets to revoke it.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Same Eloquent model is fine. Same permission namespace for staff-only actions is not. Treat portal actors as a different audience.&lt;/p&gt;

&lt;h2&gt;
  
  
  Two surfaces, one Laravel app
&lt;/h2&gt;

&lt;p&gt;Most products end up with:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Staff surface:&lt;/strong&gt; &lt;code&gt;/admin&lt;/code&gt;, session auth, Spatie roles for CMS/CRM, activity log, maybe impersonation.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Portal surface:&lt;/strong&gt; &lt;code&gt;/portal&lt;/code&gt; or a subdomain, session or Sanctum auth, portal roles (&lt;code&gt;client-admin&lt;/code&gt;, &lt;code&gt;client-member&lt;/code&gt;, &lt;code&gt;client-billing&lt;/code&gt;), policies filtered by &lt;code&gt;account_id&lt;/code&gt; / &lt;code&gt;organization_id&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;You can implement both in one codebase. Do not reuse staff permission strings as the only line of defense for portal writes.&lt;/p&gt;

&lt;p&gt;Cheat sheet:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Staff goal: operate the product. Portal goal: consume and update own account data.&lt;/li&gt;
&lt;li&gt;Staff default deny: no module permission. Portal default deny: no membership on the account.&lt;/li&gt;
&lt;li&gt;Staff failure mode: over-privileged editor. Portal failure mode: IDOR across accounts.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;RBAC and tenancy are related. They are not the same layer.&lt;/p&gt;

&lt;h2&gt;
  
  
  What to name in Spatie
&lt;/h2&gt;

&lt;p&gt;Prefer permission names that encode the portal audience:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Good: &lt;code&gt;portal.projects.view&lt;/code&gt;, &lt;code&gt;portal.projects.update&lt;/code&gt;, &lt;code&gt;portal.invoices.pay&lt;/code&gt;, &lt;code&gt;portal.users.invite&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Risky: bare &lt;code&gt;projects.view&lt;/code&gt; for both staff "all" and client "mine"&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Roles group those permissions:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;client-admin&lt;/code&gt;: invite members, manage billing contacts, view all account projects&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;client-member&lt;/code&gt;: view and update assigned projects only&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;client-billing&lt;/code&gt;: invoices and payment methods&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;client-viewer&lt;/code&gt;: read-only across the account&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Keep staff roles (&lt;code&gt;super-admin&lt;/code&gt;, &lt;code&gt;editor&lt;/code&gt;, &lt;code&gt;support&lt;/code&gt;) in a separate naming family. Do not invent a "client-super-admin" that maps to staff middleware.&lt;/p&gt;

&lt;p&gt;Seed portal roles in code so production permission strings are not casually renamed in a UI. Optionally expose a subset of portal role management to trusted support users.&lt;/p&gt;

&lt;h2&gt;
  
  
  Guards: when multiples help
&lt;/h2&gt;

&lt;p&gt;Spatie supports multiple guards as namespaces. Creating &lt;code&gt;edit articles&lt;/code&gt; for &lt;code&gt;web&lt;/code&gt; does not create it for &lt;code&gt;admin&lt;/code&gt;. Assignments must match the user's guard or you get &lt;code&gt;GuardDoesNotMatch&lt;/code&gt; errors.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Separate portal guard helps when:&lt;/strong&gt; portal users are a different authenticatable model, you want hard isolation so staff roles cannot land on portal sessions, or session cookies are already split.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;One guard is enough when:&lt;/strong&gt; one &lt;code&gt;User&lt;/code&gt; model with membership, you force a single &lt;code&gt;$guard_name&lt;/code&gt;, and route middleware plus policies do the isolation.&lt;/p&gt;

&lt;p&gt;Multiple guards add ceremony. Single guard is simpler but demands ironclad middleware on &lt;code&gt;/admin&lt;/code&gt; and &lt;code&gt;/portal&lt;/code&gt;. Pick one strategy and document it. Mixing "sometimes check guard, sometimes check role name" is how incidents start.&lt;/p&gt;

&lt;h2&gt;
  
  
  Policies still own account scope
&lt;/h2&gt;

&lt;p&gt;Roles answer capability classes. Policies answer resource instances.&lt;/p&gt;

&lt;p&gt;Put rules like these in policies (or FormRequest &lt;code&gt;authorize()&lt;/code&gt;), not only in Blade:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;User may view &lt;code&gt;Invoice $invoice&lt;/code&gt; only if they belong to that account and have &lt;code&gt;portal.invoices.view&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;User may update &lt;code&gt;Project $project&lt;/code&gt; only if they are &lt;code&gt;client-admin&lt;/code&gt; or the project is assigned to them&lt;/li&gt;
&lt;li&gt;User may never delete staff users, even with a mis-assigned permission string&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A permission without a membership check is classic IDOR: change the ID in the URL, read another tenant's ticket. Hide UI with &lt;code&gt;@can&lt;/code&gt;, but never trust UI hiding as security.&lt;/p&gt;

&lt;h2&gt;
  
  
  Six failure cases
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Guard mixups.&lt;/strong&gt; &lt;code&gt;PermissionDoesNotExist&lt;/code&gt; after adding a &lt;code&gt;portal&lt;/code&gt; guard, or checks use the wrong permission set. Set &lt;code&gt;guard_name&lt;/code&gt; explicitly. Pass the guard on checks when you use multiples.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Super-admin leak.&lt;/strong&gt; A &lt;code&gt;Gate::before&lt;/code&gt; that returns true for &lt;code&gt;super-admin&lt;/code&gt; also runs on portal routes. Scope god-mode bypass to staff middleware groups only.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Missing policies (IDOR).&lt;/strong&gt; &lt;code&gt;middleware('permission:portal.projects.view')&lt;/code&gt; then &lt;code&gt;Project::findOrFail($id)&lt;/code&gt; with no account scope. Prefer &lt;code&gt;forAccount($accountId)-&amp;gt;findOrFail($id)&lt;/code&gt; plus &lt;code&gt;$this-&amp;gt;authorize('view', $project)&lt;/code&gt;. Add feature tests that swap account IDs.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Staff permission reuse.&lt;/strong&gt; Client role includes &lt;code&gt;users.manage&lt;/code&gt; because a seeder reused the staff matrix. Separate catalogs. Code-review seeders.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Session fixation across surfaces.&lt;/strong&gt; One session guard serves both route groups. Separate login endpoints, regenerate sessions, reject the wrong audience in middleware. Pair with 2FA for staff.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;API tokens without portal abilities.&lt;/strong&gt; Sanctum token with &lt;code&gt;*&lt;/code&gt; or staff permission names. Map abilities to portal permissions only. Revoke on offboarding.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Where LaraDashboard fits
&lt;/h2&gt;

&lt;p&gt;Disclosure again: &lt;strong&gt;LaraDashboard&lt;/strong&gt; ships staff-facing RBAC on Spatie: role UI, permission groups (including module-scoped permissions), middleware, policies, Blade directives, activity logging, and guarded impersonation. That is the foundation for the admin half of a client-portal product.&lt;/p&gt;

&lt;p&gt;What you still build for the portal half:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Portal route group and views&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;portal.*&lt;/code&gt; role/permission seeders&lt;/li&gt;
&lt;li&gt;Account membership model&lt;/li&gt;
&lt;li&gt;Policies that enforce account scope&lt;/li&gt;
&lt;li&gt;Optional separate guard if authenticatable models differ&lt;/li&gt;
&lt;li&gt;Tests for IDOR and role escalation&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;LaraDashboard does not replace your portal UX or tenancy rules. It reduces the cost of running a secure staff admin next to that portal.&lt;/p&gt;

&lt;h2&gt;
  
  
  Suggested build order
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;Write the role map on paper. Staff vs portal. No shared "admin" name for both.&lt;/li&gt;
&lt;li&gt;Seed &lt;code&gt;portal.*&lt;/code&gt; permissions. Attach to portal roles only.&lt;/li&gt;
&lt;li&gt;Lock staff routes with staff middleware (and/or admin guard). Confirm clients get 403 on &lt;code&gt;/admin&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Add membership + policies before fancy portal UI.&lt;/li&gt;
&lt;li&gt;Add UI that only shows actions the policy allows.&lt;/li&gt;
&lt;li&gt;Log role changes.&lt;/li&gt;
&lt;li&gt;Test cross-account access, guard mismatch, and super-admin bypass.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Skip step 3 and you debug clients inside settings. Skip step 4 and you debug silent data leaks.&lt;/p&gt;

&lt;h2&gt;
  
  
  Ending note
&lt;/h2&gt;

&lt;p&gt;Client portal security fails when you treat portal users as "staff with fewer boxes ticked." Separate the audiences in naming, middleware, and policies. Use Spatie for role storage. Use Laravel policies for account-scoped resources. Use LaraDashboard for the staff admin with auditable RBAC while you keep portal rules in your app code.&lt;/p&gt;

&lt;p&gt;For the full walkthrough with FAQ and deeper guard tradeoffs, read the canonical post:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://laradashboard.com/blog/role-based-access-for-client-portals-with-spatie-and-laradashboard" rel="noopener noreferrer"&gt;https://laradashboard.com/blog/role-based-access-for-client-portals-with-spatie-and-laradashboard&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;If you want a Laravel admin that already speaks Spatie roles for the staff side, try the demo or docs on &lt;a href="https://laradashboard.com" rel="noopener noreferrer"&gt;laradashboard.com&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>laravel</category>
      <category>security</category>
      <category>php</category>
      <category>spatie</category>
    </item>
    <item>
      <title>Layered Abuse Control for Self-Hosted Laravel Admins</title>
      <dc:creator>Maniruzzaman Akash</dc:creator>
      <pubDate>Mon, 21 Sep 2026 04:20:41 +0000</pubDate>
      <link>https://dev.to/maniruzzamanakash/layered-abuse-control-for-self-hosted-laravel-admins-43bp</link>
      <guid>https://dev.to/maniruzzamanakash/layered-abuse-control-for-self-hosted-laravel-admins-43bp</guid>
      <description>&lt;p&gt;You locked HTTPS. You hardened login. Backups are on a calendar.&lt;/p&gt;

&lt;p&gt;Bots still hammer admin login and public forms all day.&lt;/p&gt;

&lt;p&gt;Credential stuffing does not need a clever zero-day. It needs an open port and a patient script. A host firewall, a reverse proxy with sane headers, a WAF layer, fail2ban, and Laravel rate limits close that abuse gate. Without them, auth and patches only slow the noise.&lt;/p&gt;

&lt;p&gt;This is a practical layering guide for self-hosted Laravel CMS admins. It focuses on login, contact forms, and API abuse. Disclosure up front: we build &lt;strong&gt;LaraDashboard&lt;/strong&gt;, an open-source Laravel admin and CMS. The patterns apply to any Laravel app you own. Use LaraDashboard when you want routes and forms you can throttle on purpose instead of waiting on a pile of plugins.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why layers beat a single shield
&lt;/h2&gt;

&lt;p&gt;Many teams enable HTTPS and hope. Others put Cloudflare in front and skip app-level throttles. Both leave gaps.&lt;/p&gt;

&lt;p&gt;Your origin IP can still get hit. Laravel still pays for every request that reaches PHP. Edge rules will not catch every bypass path.&lt;/p&gt;

&lt;p&gt;Aim for layered controls:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Block what should never reach the box (host firewall).&lt;/li&gt;
&lt;li&gt;Terminate TLS and add headers at the reverse proxy.&lt;/li&gt;
&lt;li&gt;Filter hostile shapes at a WAF before PHP runs.&lt;/li&gt;
&lt;li&gt;Ban repeat offenders with fail2ban.&lt;/li&gt;
&lt;li&gt;Cap what the app accepts per IP and per user with Laravel &lt;code&gt;RateLimiter&lt;/code&gt;.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Auth without traffic controls still leaves you open to stuffing and spam.&lt;/p&gt;

&lt;h2&gt;
  
  
  Host firewall: deny by default
&lt;/h2&gt;

&lt;p&gt;Start on the OS. If SSH, HTTP, and HTTPS are the only public services, close everything else.&lt;/p&gt;

&lt;p&gt;On Ubuntu/Debian with ufw:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;ufw default deny incoming
&lt;span class="nb"&gt;sudo &lt;/span&gt;ufw default allow outgoing
&lt;span class="nb"&gt;sudo &lt;/span&gt;ufw allow OpenSSH
&lt;span class="nb"&gt;sudo &lt;/span&gt;ufw allow 80/tcp
&lt;span class="nb"&gt;sudo &lt;/span&gt;ufw allow 443/tcp
&lt;span class="nb"&gt;sudo &lt;/span&gt;ufw &lt;span class="nb"&gt;enable
sudo &lt;/span&gt;ufw status verbose
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Confirm SSH still works before you close the laptop. Prefer allowlisting SSH from stable admin egress when you can.&lt;/p&gt;

&lt;p&gt;Do not expose MySQL, Redis, Elasticsearch, phpMyAdmin, or queue dashboards on public ports. Bind them to localhost or a private network. Cloud security groups should match the host rules so the next operator is not confused by a wide cloud rule and a tight ufw.&lt;/p&gt;

&lt;h2&gt;
  
  
  Reverse proxy: nginx or Caddy
&lt;/h2&gt;

&lt;p&gt;Laravel should sit behind nginx or Caddy in production. The proxy terminates TLS, sets headers, and forwards to PHP-FPM or your container.&lt;/p&gt;

&lt;p&gt;Serve HTTPS only. Redirect HTTP to HTTPS. Set &lt;code&gt;TrustProxies&lt;/code&gt; so &lt;code&gt;X-Forwarded-For&lt;/code&gt; and &lt;code&gt;X-Forwarded-Proto&lt;/code&gt; come from your proxy only. Wrong trust settings break HTTPS detection and rate-limit IP keys.&lt;/p&gt;

&lt;p&gt;Add headers you can maintain: HSTS (once HTTPS is solid), &lt;code&gt;X-Content-Type-Options: nosniff&lt;/code&gt;, a sane &lt;code&gt;Referrer-Policy&lt;/code&gt;, and frame controls. Start CSP in report-only if a Livewire admin breaks.&lt;/p&gt;

&lt;p&gt;Point the document root at &lt;code&gt;public/&lt;/code&gt; only. Hide &lt;code&gt;/.env&lt;/code&gt; and &lt;code&gt;/vendor&lt;/code&gt;. Cap &lt;code&gt;client_max_body_size&lt;/code&gt; on public forms. Prefer &lt;code&gt;limit_req&lt;/code&gt; zones on login and form locations when you want edge throttling before PHP.&lt;/p&gt;

&lt;p&gt;One proxy config in git beats tribal knowledge on the box.&lt;/p&gt;

&lt;h2&gt;
  
  
  WAF: buy time, not a substitute for patches
&lt;/h2&gt;

&lt;p&gt;A WAF inspects HTTP for known attack shapes: SQLi probes, XSS payloads, path traversal, noisy bots. It is not a substitute for patching. It reduces noise.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;ModSecurity + OWASP CRS&lt;/strong&gt; works on nginx/Apache. Run DetectionOnly first. Whitelist narrow paths that break (uploads, some Livewire endpoints). Paranoia mode will fight a rich CMS editor if you skip tuning.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;CDN WAF&lt;/strong&gt; (Cloudflare and similar) gives managed rules without maintaining CRS yourself. Lock the origin so only the CDN can reach app ports. If the origin IP is public and open, attackers bypass the WAF entirely.&lt;/p&gt;

&lt;p&gt;Small VPS with one CMS: CDN WAF plus host firewall is often enough. Air-gapped hosts: ModSecurity on the proxy. High traffic APIs: combine edge WAF with precise Laravel throttles so good API keys are not painted like scrapers.&lt;/p&gt;

&lt;h2&gt;
  
  
  fail2ban as a backstop
&lt;/h2&gt;

&lt;p&gt;fail2ban watches logs and turns abuse into firewall drops.&lt;/p&gt;

&lt;p&gt;Enable the sshd jail. Prefer key-only SSH. For the web, filter nginx/Caddy logs for repeated &lt;code&gt;POST /login&lt;/code&gt; failures or contact endpoint floods. If Laravel logs auth failures, point a jail there.&lt;/p&gt;

&lt;p&gt;Whitelist office and VPN egress. After you adopt a CDN, ban the real client IP, not the CDN edge. That means correct forwarded headers in both the proxy and the jail filters.&lt;/p&gt;

&lt;h2&gt;
  
  
  Laravel rate limits that actually share state
&lt;/h2&gt;

&lt;p&gt;Edge controls reduce volume. App rate limits decide how many attempts a client may make against login, password reset, forms, and APIs.&lt;/p&gt;

&lt;p&gt;Define named limiters:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight php"&gt;&lt;code&gt;&lt;span class="nc"&gt;RateLimiter&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="k"&gt;for&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'login'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="k"&gt;function&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;Request&lt;/span&gt; &lt;span class="nv"&gt;$request&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nc"&gt;Limit&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="nf"&gt;perMinute&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="nf"&gt;by&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$request&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="nf"&gt;ip&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;Attach &lt;code&gt;throttle:login&lt;/code&gt; on the login POST. Use stricter limits on password reset and 2FA challenge routes. Attackers often pivot there after login is locked.&lt;/p&gt;

&lt;p&gt;Public APIs need separate budgets from browser forms. Authenticated tokens can be keyed by user or token. Return proper 429 with &lt;code&gt;Retry-After&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Cache driver matters.&lt;/strong&gt; Counters live in cache. Use Redis (or another shared store) with multiple app nodes. The &lt;code&gt;file&lt;/code&gt; driver gives each node its own generous budget.&lt;/p&gt;

&lt;p&gt;If you customized Fortify/Breeze login, verify built-in login rate limiting is still wired. Custom controllers often forget it.&lt;/p&gt;

&lt;h2&gt;
  
  
  Login and forms are the loud endpoints
&lt;/h2&gt;

&lt;p&gt;Treat admin login and public forms as high-value.&lt;/p&gt;

&lt;p&gt;Combine strong passwords, 2FA, throttle middleware, fail2ban on repeated failures, and optional VPN or allowlist for &lt;code&gt;/admin&lt;/code&gt; when team size allows. Use generic login errors to reduce account enumeration.&lt;/p&gt;

&lt;p&gt;On public forms: honeypot, time-based checks, throttle, optional CAPTCHA when spam stays high, server-side validation always, upload caps at the proxy.&lt;/p&gt;

&lt;p&gt;During a stuffing run, occasional 429s for real users beat an open login. Document how to unban an IP and how to raise a limiter temporarily during a launch.&lt;/p&gt;

&lt;h2&gt;
  
  
  A short checklist
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Layer&lt;/th&gt;
&lt;th&gt;Check&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Host&lt;/td&gt;
&lt;td&gt;Deny-by-default; only SSH/80/443 (or VPN) public&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Host&lt;/td&gt;
&lt;td&gt;DB/Redis/queue ports not public&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Proxy&lt;/td&gt;
&lt;td&gt;TLS + headers; docroot &lt;code&gt;public/&lt;/code&gt;; TrustProxies correct&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;WAF&lt;/td&gt;
&lt;td&gt;CDN WAF or tuned ModSecurity; origin locked&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;fail2ban&lt;/td&gt;
&lt;td&gt;sshd + login/form jails; office IPs whitelisted&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Laravel&lt;/td&gt;
&lt;td&gt;Named limiters on login, reset, forms, API; Redis cache&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Forms&lt;/td&gt;
&lt;td&gt;Honeypot/CAPTCHA as needed; upload caps&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Ops&lt;/td&gt;
&lt;td&gt;Alert on ban spikes and 429 floods; unban runbook&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  Common failure cases
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Open origin behind CDN: attackers skip the WAF. Firewall origin to CDN ranges or a tunnel.&lt;/li&gt;
&lt;li&gt;Wrong client IP: every visitor shares one proxy address. Fix TrustProxies and &lt;code&gt;real_ip&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Throttle only in nginx: internal routes still see abuse. Keep Laravel limits too.&lt;/li&gt;
&lt;li&gt;Untuned CRS: blocks editors. DetectionOnly, then narrow allowlists.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;file&lt;/code&gt; cache on many nodes: limits reset per box.&lt;/li&gt;
&lt;li&gt;fail2ban on CDN IPs: you ban infrastructure, not bots.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Where LaraDashboard fits
&lt;/h2&gt;

&lt;p&gt;Disclosure again: &lt;strong&gt;LaraDashboard&lt;/strong&gt; is our open-source Laravel admin and CMS. We recommend it when you want a self-hosted CMS you own, with content, media, roles, and forms in one Laravel-native back office.&lt;/p&gt;

&lt;p&gt;You still own the firewall, proxy, WAF, and rate-limit wiring. That is the point versus a shared host you cannot tune. Standard Laravel middleware and your reverse proxy apply. LaraDashboard does not replace ufw, fail2ban, or a CDN WAF. It gives you routes and forms you can throttle on purpose.&lt;/p&gt;

&lt;h2&gt;
  
  
  Ending note
&lt;/h2&gt;

&lt;p&gt;Firewall, WAF, and rate limiting close the abuse gate on a self-hosted Laravel CMS. Deny unused ports, terminate TLS at nginx or Caddy, filter at a WAF, ban repeat offenders with fail2ban, and throttle login and forms in Laravel.&lt;/p&gt;

&lt;p&gt;Keep this next to your HTTPS, auth, and backup checklists. For the full walkthrough with FAQ and the living checklist table, read the canonical post on LaraDashboard:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://laradashboard.com/blog/firewall-waf-and-rate-limiting-for-self-hosted-laradashboard" rel="noopener noreferrer"&gt;https://laradashboard.com/blog/firewall-waf-and-rate-limiting-for-self-hosted-laradashboard&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;If you want a Laravel-native CMS you can harden on your own terms, try the demo or docs on &lt;a href="https://laradashboard.com" rel="noopener noreferrer"&gt;laradashboard.com&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>laravel</category>
      <category>security</category>
      <category>devops</category>
      <category>webdev</category>
    </item>
    <item>
      <title>Stop Being the Copy-Paste Bridge — MCP for Everyday CMS Work</title>
      <dc:creator>Maniruzzaman Akash</dc:creator>
      <pubDate>Fri, 18 Sep 2026 19:25:20 +0000</pubDate>
      <link>https://dev.to/maniruzzamanakash/stop-being-the-copy-paste-bridge-mcp-for-everyday-cms-work-ejm</link>
      <guid>https://dev.to/maniruzzamanakash/stop-being-the-copy-paste-bridge-mcp-for-everyday-cms-work-ejm</guid>
      <description>&lt;p&gt;You open the admin. Then chat. Then email. Then the form inbox. Then the CRM.&lt;/p&gt;

&lt;p&gt;By mid-morning you have ten tabs and three half-finished tasks. Nothing is hard. Everything is slow. You are the integration layer.&lt;/p&gt;

&lt;p&gt;That is the part most "AI for CMS" demos skip. They rewrite a paragraph in a chat window. Your real work still lives in drafts, tickets, media uploads, and publish buttons.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;MCP (Model Context Protocol)&lt;/strong&gt; is the boring fix for that gap.&lt;/p&gt;

&lt;h2&gt;
  
  
  What MCP actually is
&lt;/h2&gt;

&lt;p&gt;MCP is an open standard for connecting AI clients to apps and data. A server describes tools with schemas. The assistant discovers them and calls them. It does not guess your API shape.&lt;/p&gt;

&lt;p&gt;A chatbot that only talks ends at text. You still own every paste.&lt;/p&gt;

&lt;p&gt;An MCP-connected assistant can list tickets, draft a post, search docs, or prepare an email &lt;em&gt;inside&lt;/em&gt; your real systems. The win is not "smarter prose." The win is structured access.&lt;/p&gt;

&lt;p&gt;You still write. You still decide. You stop acting as the only bridge between chat and the admin UI.&lt;/p&gt;

&lt;h2&gt;
  
  
  Where the day goes without it
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Task&lt;/th&gt;
&lt;th&gt;Manual today&lt;/th&gt;
&lt;th&gt;With MCP + a small approval loop&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Publish a blog draft&lt;/td&gt;
&lt;td&gt;Find draft, edit, set status, save&lt;/td&gt;
&lt;td&gt;Assistant updates draft; you confirm publish&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Triage tickets&lt;/td&gt;
&lt;td&gt;Scan list, open threads, assign&lt;/td&gt;
&lt;td&gt;Assistant lists open items; you approve assigns&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Form inbox&lt;/td&gt;
&lt;td&gt;Open each submission, mark viewed&lt;/td&gt;
&lt;td&gt;Assistant lists unviewed; you approve marks&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Daily "what needs me?"&lt;/td&gt;
&lt;td&gt;Hop across modules&lt;/td&gt;
&lt;td&gt;Assistant returns one briefing list&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Attach a featured image&lt;/td&gt;
&lt;td&gt;Upload, open post, attach&lt;/td&gt;
&lt;td&gt;Assistant uploads or finds media; you confirm&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Clear cache after a change&lt;/td&gt;
&lt;td&gt;Ops screen or SSH&lt;/td&gt;
&lt;td&gt;Assistant calls clear after you confirm&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Notice what stays manual on the right: confirmation, tone, judgment. Busywork moves. Responsibility does not vanish.&lt;/p&gt;

&lt;h2&gt;
  
  
  The pattern that keeps production safe
&lt;/h2&gt;

&lt;p&gt;Full autopilot fails for boring reasons. Wrong IDs. Tone misfires. Deletes that stick. Secrets in the wrong place.&lt;/p&gt;

&lt;p&gt;Use three defaults:&lt;/p&gt;

&lt;h3&gt;
  
  
  1. Read, then propose
&lt;/h3&gt;

&lt;p&gt;List first. Propose the next action in plain language. Fix the plan before any write runs.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. Draft, then approve
&lt;/h3&gt;

&lt;p&gt;Create posts as &lt;strong&gt;draft&lt;/strong&gt;. Draft the public reply. Prepare the email fields. Humans confirm publish, send, and delete.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. Dry-run, then apply
&lt;/h3&gt;

&lt;p&gt;Prefer tools that show what &lt;em&gt;would&lt;/em&gt; change. Apply only after a human yes.&lt;/p&gt;

&lt;p&gt;Map your tools to those stages so the team shares a vocabulary:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Read:&lt;/strong&gt; list posts, list tickets, list form submissions, search docs, daily briefing, site health
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Draft:&lt;/strong&gt; create-post as draft, draft reply text, prepare send fields
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Approve write:&lt;/strong&gt; publish, reply, send email, clear cache, delete
&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Security is part of the product, not a footnote
&lt;/h2&gt;

&lt;p&gt;Treat an MCP connection like any other privileged integration.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Scoped tokens.&lt;/strong&gt; One token per agent or host. Not one forever token shared across laptops and CI. Rotate when people leave.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Least privilege.&lt;/strong&gt; Start read-only. Add write abilities when you have an approval habit and an audit path. Separate read from write when the host allows it.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Skip MCP when:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;You do not trust the system yet
&lt;/li&gt;
&lt;li&gt;There is no staging twin and no audit log for a production database
&lt;/li&gt;
&lt;li&gt;The flow is highly regulated and legal has not reviewed write tools
&lt;/li&gt;
&lt;li&gt;The job is an angry public customer reply (draft is fine; send still needs a human)
&lt;/li&gt;
&lt;li&gt;Personal mail with broad send rights on day one
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If you cannot explain who may call a tool and how you will audit it, do not expose that tool yet.&lt;/p&gt;

&lt;h2&gt;
  
  
  Failure modes that bite teams
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Vague tools.&lt;/strong&gt; &lt;code&gt;doStuff&lt;/code&gt; helps no one. &lt;code&gt;list-form-submissions&lt;/code&gt; with filters for form and unviewed state helps immediately. Fix the catalog before you blame the model.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Over-permission.&lt;/strong&gt; A token with every ability turns a prompt mistake into a wide outage. Expand with intent, not "just make it work."&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Silent success.&lt;/strong&gt; A tool that returns success while doing nothing is worse than a loud error. Prefer clear failures. Watch partial success: post created, image attach failed.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Confused identity.&lt;/strong&gt; Shared tokens blur audit trails. Give people their own tokens tied to their permissions when you can. Shared robots for CI are fine. Shared robots for human editors are not.&lt;/p&gt;

&lt;h2&gt;
  
  
  A starter set (week one)
&lt;/h2&gt;

&lt;p&gt;Three tools beat thirty.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Content teams&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Daily briefing
&lt;/li&gt;
&lt;li&gt;Create post as draft
&lt;/li&gt;
&lt;li&gt;Update post (publish only after review)&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;Support teams&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;List open tickets
&lt;/li&gt;
&lt;li&gt;Summarize a thread
&lt;/li&gt;
&lt;li&gt;Draft a reply (do not send until confirmed)&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Measure progress without fake ROI charts. Count tab switches during a publish. Count minutes from "please draft this" to a reviewable draft. If those fall across two weeks, the setup is working. If not, fix the catalog or the approval habit.&lt;/p&gt;

&lt;h2&gt;
  
  
  How this looks on LaraDashboard (disclosure)
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Disclosure:&lt;/strong&gt; I work on &lt;a href="https://laradashboard.com" rel="noopener noreferrer"&gt;LaraDashboard&lt;/a&gt;, an open-source Laravel CMS and admin with an optional built-in MCP server. Steal the workflow even if you wire your own server.&lt;/p&gt;

&lt;p&gt;On LaraDashboard, MCP lives under &lt;strong&gt;Settings → MCP&lt;/strong&gt;. You create agent tokens and attach abilities. Tools cover posts, media, daily briefing, email templates, CRM/tickets, forms, docs, cache, and logs — filtered by token abilities and the linked user's permissions.&lt;/p&gt;

&lt;p&gt;A practical getting-started checklist:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Enable MCP
&lt;/li&gt;
&lt;li&gt;Create a dedicated agent token (do not reuse a browser session)
&lt;/li&gt;
&lt;li&gt;Grant least-privilege abilities (start read-only)
&lt;/li&gt;
&lt;li&gt;Connect Cursor, Claude Desktop, or another MCP client
&lt;/li&gt;
&lt;li&gt;Call &lt;code&gt;list-mcp-tools&lt;/code&gt; and verify the catalog
&lt;/li&gt;
&lt;li&gt;Run a read-only test (&lt;code&gt;list-posts&lt;/code&gt; or daily briefing)
&lt;/li&gt;
&lt;li&gt;Run a draft write test (&lt;code&gt;create-post&lt;/code&gt; as draft)
&lt;/li&gt;
&lt;li&gt;Practice an approval loop on publish or send
&lt;/li&gt;
&lt;li&gt;Add media upload only when needed
&lt;/li&gt;
&lt;li&gt;Document who approves which writes; expand abilities only after the first workflow feels stable
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Most "MCP is broken" reports are scope issues: token abilities, module status, or site health — not the protocol itself.&lt;/p&gt;

&lt;h2&gt;
  
  
  What "done" looks like for a pilot
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;One read workflow used daily for two weeks
&lt;/li&gt;
&lt;li&gt;One write workflow with confirmations and zero surprise publishes
&lt;/li&gt;
&lt;li&gt;Tokens named, scoped, and stored outside chat
&lt;/li&gt;
&lt;li&gt;A short internal doc with house rules and starter tools
&lt;/li&gt;
&lt;li&gt;A known owner for catalog changes
&lt;/li&gt;
&lt;li&gt;A rollback plan: revoke token, disable MCP, continue in the admin UI
&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Ending note
&lt;/h2&gt;

&lt;p&gt;You do not need a larger chatbot. You need fewer tab hops between intent and a reviewable action.&lt;/p&gt;

&lt;p&gt;MCP gives assistants a clear door into your systems. A small human loop keeps publish, send, and delete under your control.&lt;/p&gt;

&lt;p&gt;Start narrow. Read first. Add one write workflow. Keep confirmations on the actions you would hate to undo.&lt;/p&gt;

&lt;p&gt;The longer original (with more LaraDashboard-specific tool mapping) lives here — this Dev.to version is adapted from it, and that URL is the canonical source:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href="https://laradashboard.com/blog/how-mcp-makes-everyday-work-easier-with-a-small-human-in-the-loop" rel="noopener noreferrer"&gt;How MCP Makes Everyday Work Easier (With a Small Human in the Loop)&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Try the product at &lt;a href="https://laradashboard.com" rel="noopener noreferrer"&gt;laradashboard.com&lt;/a&gt; if you want that door inside a Laravel CMS you can own.&lt;/p&gt;

</description>
      <category>mcp</category>
      <category>ai</category>
      <category>productivity</category>
      <category>laravel</category>
    </item>
    <item>
      <title>Stop Building Laravel Admin Panels From Scratch — Meet Lara Dashboard</title>
      <dc:creator>Maniruzzaman Akash</dc:creator>
      <pubDate>Sat, 14 Feb 2026 07:12:39 +0000</pubDate>
      <link>https://dev.to/maniruzzamanakash/stop-building-laravel-admin-panels-from-scratch-meet-lara-dashboard-12jl</link>
      <guid>https://dev.to/maniruzzamanakash/stop-building-laravel-admin-panels-from-scratch-meet-lara-dashboard-12jl</guid>
      <description>&lt;p&gt;Hey there, fellow Laravel developer!&lt;/p&gt;

&lt;p&gt;Are you still spending weeks building the same boring admin panel features for every client project? User management, role management, permissions, blog systems, media libraries... the list goes on.&lt;/p&gt;

&lt;p&gt;What if I told you there's a 100% free, open-source solution that gives you all of this — and more — out of the box?&lt;/p&gt;

&lt;p&gt;Let me introduce you to &lt;a href="https://laradashboard.com" rel="noopener noreferrer"&gt;https://laradashboard.com&lt;/a&gt; — your all-in-one marketplace CMS solution for Laravel.&lt;/p&gt;




&lt;p&gt;The Pain We All Know Too Well&lt;/p&gt;

&lt;p&gt;Every Laravel project starts the same way:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;"I need user authentication with role-based access control"&lt;/li&gt;
&lt;li&gt;"I need a beautiful admin dashboard with charts"&lt;/li&gt;
&lt;li&gt;"I need content management — posts, pages, categories, tags"&lt;/li&gt;
&lt;li&gt;"I need a media library for file uploads"&lt;/li&gt;
&lt;li&gt;"I need email templates and notification management"&lt;/li&gt;
&lt;li&gt;"I need multi-language support"&lt;/li&gt;
&lt;li&gt;"I need activity logging for audit trails"&lt;/li&gt;
&lt;li&gt;"I need REST APIs for mobile apps"&lt;/li&gt;
&lt;li&gt;"Oh, and I need AI-powered content generation because it's 2026"&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Sound familiar? You've probably built these features dozens of times. Each time reinventing the wheel, each time spending precious hours on boilerplate instead of your client's actual business logic.&lt;/p&gt;

&lt;p&gt;What if you could skip all that and focus on what actually matters?&lt;/p&gt;




&lt;p&gt;What is Lara Dashboard?&lt;/p&gt;

&lt;p&gt;Lara Dashboard is a complete, production-ready Laravel admin panel and CMS that comes with everything you need to kickstart any Laravel project.&lt;/p&gt;

&lt;p&gt;Built on the latest tech stack:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Laravel 12.x with PHP 8.3/8.4&lt;/li&gt;
&lt;li&gt;Livewire 3 for reactive components&lt;/li&gt;
&lt;li&gt;Tailwind CSS 4 for beautiful, responsive UI&lt;/li&gt;
&lt;li&gt;Alpine.js for lightweight interactivity&lt;/li&gt;
&lt;li&gt;Laravel Pulse for real-time monitoring&lt;/li&gt;
&lt;li&gt;Laravel Sanctum for API authentication&lt;/li&gt;
&lt;li&gt;Pest for modern testing&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;It's not just another admin template. It's a fully functional application with business logic, services, tests, and a modular architecture that lets you extend it infinitely.&lt;/p&gt;




&lt;p&gt;Features That'll Make You Say "Finally!"&lt;/p&gt;

&lt;p&gt;User &amp;amp; Access Management&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Complete user CRUD with profile management&lt;/li&gt;
&lt;li&gt;Role-based access control (RBAC) using Spatie Permissions&lt;/li&gt;
&lt;li&gt;Granular permission system with grouped permissions&lt;/li&gt;
&lt;li&gt;Admin impersonation — log in as any user for debugging&lt;/li&gt;
&lt;li&gt;Beautiful user detail pages with activity history&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Content Management System (CMS)&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Posts and Pages with visual drag-and-drop builder&lt;/li&gt;
&lt;li&gt;Categories and Tags with hierarchical structure&lt;/li&gt;
&lt;li&gt;SEO-friendly URLs and meta management&lt;/li&gt;
&lt;li&gt;Media library with image optimization&lt;/li&gt;
&lt;li&gt;Content scheduling and drafts&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;AI-Powered Content Generation&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Built-in AI Agent for content creation&lt;/li&gt;
&lt;li&gt;Support for OpenAI, Anthropic, and other providers&lt;/li&gt;
&lt;li&gt;Inline AI editor for posts and pages&lt;/li&gt;
&lt;li&gt;Fine-tuning options for tone and style&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Email Management&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Visual email template builder (drag-and-drop blocks)&lt;/li&gt;
&lt;li&gt;Multiple email connections (SMTP, Mailgun, etc.)&lt;/li&gt;
&lt;li&gt;Inbound and outbound email management&lt;/li&gt;
&lt;li&gt;Notification system with customizable triggers&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Translation &amp;amp; Localization&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;21+ languages supported out of the box&lt;/li&gt;
&lt;li&gt;Easy translation management UI&lt;/li&gt;
&lt;li&gt;Add any new language in seconds&lt;/li&gt;
&lt;li&gt;RTL support ready&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Monitoring &amp;amp; Security&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Activity logging for every action&lt;/li&gt;
&lt;li&gt;Laravel Pulse integration for real-time metrics&lt;/li&gt;
&lt;li&gt;Laravel Telescope for debugging&lt;/li&gt;
&lt;li&gt;reCAPTCHA integration&lt;/li&gt;
&lt;li&gt;Customizable login page settings&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Developer Experience&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Modular architecture — add/remove features as modules&lt;/li&gt;
&lt;li&gt;CRUD Generator — scaffold complete CRUD in one command&lt;/li&gt;
&lt;li&gt;WordPress-like hooks — action/filter system for extensibility&lt;/li&gt;
&lt;li&gt;REST API with auto-generated Scramble documentation&lt;/li&gt;
&lt;li&gt;Comprehensive test suite — Pest, PHPStan, Rector, Pint&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;The Module System — This Changes Everything&lt;/p&gt;

&lt;p&gt;Here's where Lara Dashboard really shines. It uses a modular architecture powered by &lt;a href="https://laravelmodules.com/" rel="noopener noreferrer"&gt;https://laravelmodules.com/&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;This means:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Install only what you need — Don't need a blog? Don't enable the module.&lt;/li&gt;
&lt;li&gt;Add features via marketplace — Browse and install modules with one click.&lt;/li&gt;
&lt;li&gt;Build your own modules — Create custom functionality that plugs right in.&lt;/li&gt;
&lt;li&gt;Share or sell your modules — Build once, monetize forever.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;CRUD Generator — Your New Best Friend&lt;/p&gt;

&lt;p&gt;Need to add a new entity to your project? One command does it all:&lt;/p&gt;

&lt;p&gt;# Create migration&lt;br&gt;
  php artisan module:make-migration create_products_table Shop&lt;/p&gt;

&lt;p&gt;# Run migration&lt;br&gt;
  php artisan migrate&lt;/p&gt;

&lt;p&gt;# Generate complete CRUD&lt;br&gt;
  php artisan module:make-crud Shop --migration=create_products_table&lt;/p&gt;

&lt;p&gt;What you get:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Model with fillable fields and casts&lt;/li&gt;
&lt;li&gt;Datatable with sorting, searching, pagination&lt;/li&gt;
&lt;li&gt;Index, Show, Create, Edit Livewire components&lt;/li&gt;
&lt;li&gt;Blade views with breadcrumb navigation&lt;/li&gt;
&lt;li&gt;Routes and sidebar menu item&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;From zero to fully functional CRUD in under 60 seconds. No joke.&lt;/p&gt;




&lt;p&gt;Is It Really Free?&lt;/p&gt;

&lt;p&gt;Yes, 100% free and open source.&lt;/p&gt;

&lt;p&gt;The core is completely free under the MIT license. You can use it for personal projects, client work, SaaS products — whatever you want.&lt;/p&gt;

&lt;p&gt;There are also premium modules available at &lt;a href="https://laradashboard.com" rel="noopener noreferrer"&gt;https://laradashboard.com&lt;/a&gt; if you need advanced features like:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;CRM (Customer Relationship Management)&lt;/li&gt;
&lt;li&gt;HRM (Human Resource Management)&lt;/li&gt;
&lt;li&gt;Course Management&lt;/li&gt;
&lt;li&gt;E-commerce&lt;/li&gt;
&lt;li&gt;And more coming...&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;But the core? Completely free. Forever.&lt;/p&gt;




&lt;p&gt;Getting Started in 5 Minutes&lt;/p&gt;

&lt;p&gt;# Clone the repo&lt;br&gt;
  git clone &lt;a href="mailto:git@github.com"&gt;git@github.com&lt;/a&gt;:laradashboard/laradashboard.git&lt;br&gt;
  cd laradashboard&lt;/p&gt;

&lt;p&gt;# Setup environment&lt;br&gt;
  cp .env.example .env&lt;/p&gt;

&lt;p&gt;# Install dependencies&lt;br&gt;
  composer install&lt;br&gt;
  npm install&lt;/p&gt;

&lt;p&gt;# Generate key and link storage&lt;br&gt;
  php artisan key:generate&lt;br&gt;
  php artisan storage:link&lt;/p&gt;

&lt;p&gt;# Run migrations with seed data&lt;br&gt;
  php artisan migrate:fresh --seed&lt;/p&gt;

&lt;p&gt;# Start the server&lt;br&gt;
  composer run dev&lt;/p&gt;

&lt;p&gt;Open &lt;a href="http://localhost:8000" rel="noopener noreferrer"&gt;http://localhost:8000&lt;/a&gt; and log in:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Email: &lt;a href="mailto:superadmin@example.com"&gt;superadmin@example.com&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Password: 12345678&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That's it. You now have a fully functional admin panel.&lt;/p&gt;




&lt;p&gt;Try Before You Clone&lt;/p&gt;

&lt;p&gt;Want to see it in action first?&lt;/p&gt;

&lt;p&gt;Live Demo: &lt;a href="https://demo.laradashboard.com?source=dev.to"&gt;https://demo.laradashboard.com?source=dev.to&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Email: &lt;a href="mailto:superadmin@example.com"&gt;superadmin@example.com&lt;/a&gt;&lt;br&gt;
  Password: 12345678&lt;/p&gt;

&lt;p&gt;Play around. Break things. The demo resets automatically.&lt;/p&gt;




&lt;p&gt;Documentation That Actually Helps&lt;/p&gt;

&lt;p&gt;We've invested heavily in documentation because we know how frustrating bad docs can be.&lt;/p&gt;

&lt;p&gt;Full documentation: &lt;a href="https://laradashboard.com/docs" rel="noopener noreferrer"&gt;https://laradashboard.com/docs&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Covers everything from:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Installation and configuration&lt;/li&gt;
&lt;li&gt;User and role management&lt;/li&gt;
&lt;li&gt;Module development&lt;/li&gt;
&lt;li&gt;CRUD generator usage&lt;/li&gt;
&lt;li&gt;API integration&lt;/li&gt;
&lt;li&gt;Deployment guides&lt;/li&gt;
&lt;li&gt;And much more...&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;The Tech Stack You'll Love&lt;/p&gt;

&lt;p&gt;| Technology        | Version | Purpose                 |&lt;br&gt;
  |-------------------|---------|-------------------------|&lt;br&gt;
  | Laravel           | 12.x    | Backend framework       |&lt;br&gt;
  | PHP               | 8.3+    | Server-side language    |&lt;br&gt;
  | Livewire          | 3.x     | Reactive components     |&lt;br&gt;
  | Tailwind CSS      | 4.x     | Styling                 |&lt;br&gt;
  | Alpine.js         | 3.x     | Frontend interactivity  |&lt;br&gt;
  | Laravel Pulse     | 1.5     | Real-time monitoring    |&lt;br&gt;
  | Laravel Sanctum   | 4.3     | API authentication      |&lt;br&gt;
  | Laravel Telescope | 5.17    | Debugging               |&lt;br&gt;
  | Pest              | 4.x     | Testing                 |&lt;br&gt;
  | React             | 18.x    | Page builder components |&lt;/p&gt;

&lt;p&gt;All the modern tools. All working together. All tested.&lt;/p&gt;




&lt;p&gt;Deployment Made Easy&lt;/p&gt;

&lt;p&gt;Lara Dashboard works everywhere:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;VPS/Dedicated servers — Standard Laravel deployment&lt;/li&gt;
&lt;li&gt;Shared hosting (cPanel) — Root index.php included, no document root changes needed&lt;/li&gt;
&lt;li&gt;Docker — Laravel Sail support built-in&lt;/li&gt;
&lt;li&gt;Cloud platforms — Works with Forge, Vapor, DigitalOcean, AWS, etc.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;We even have a distribution package builder that creates production-ready ZIP files with vendor dependencies included — perfect for clients who can't run Composer.&lt;/p&gt;




&lt;p&gt;Join the Community&lt;/p&gt;

&lt;p&gt;Lara Dashboard is built by developers, for developers. We'd love to have you:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;GitHub: &lt;a href="https://github.com/laradashboard/laradashboard" rel="noopener noreferrer"&gt;https://github.com/laradashboard/laradashboard&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Facebook Group: &lt;a href="https://www.facebook.com/groups/laradashboard" rel="noopener noreferrer"&gt;https://www.facebook.com/groups/laradashboard&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;LinkedIn: &lt;a href="https://www.linkedin.com/groups/14690156" rel="noopener noreferrer"&gt;https://www.linkedin.com/groups/14690156&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;YouTube: &lt;a href="https://www.youtube.com/@laradashboard" rel="noopener noreferrer"&gt;https://www.youtube.com/@laradashboard&lt;/a&gt; (tutorials coming!)&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;Contributing&lt;/p&gt;

&lt;p&gt;Found a bug? Have a feature idea? PRs are always welcome!&lt;/p&gt;

&lt;p&gt;The codebase follows strict standards:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Pint for code formatting&lt;/li&gt;
&lt;li&gt;PHPStan/Larastan for static analysis&lt;/li&gt;
&lt;li&gt;Rector for automated refactoring&lt;/li&gt;
&lt;li&gt;Pest for testing&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Run composer run test and everything is checked automatically.&lt;/p&gt;




&lt;p&gt;Why Choose Lara Dashboard?&lt;/p&gt;

&lt;p&gt;| Feature            | Building from Scratch | Lara Dashboard |&lt;br&gt;
  |--------------------|-----------------------|----------------|&lt;br&gt;
  | User Management    | Hours/Days            | Included       |&lt;br&gt;
  | Role &amp;amp; Permissions | Hours                 | Included       |&lt;br&gt;
  | CMS (Posts, Pages) | Days                  | Included       |&lt;br&gt;
  | Media Library      | Hours                 | Included       |&lt;br&gt;
  | Email Management   | Hours                 | Included       |&lt;br&gt;
  | AI Integration     | Days                  | Included       |&lt;br&gt;
  | Multi-language     | Hours                 | Included       |&lt;br&gt;
  | Activity Logging   | Hours                 | Included       |&lt;br&gt;
  | REST API           | Days                  | Included       |&lt;br&gt;
  | Monitoring         | Hours                 | Included       |&lt;br&gt;
  | Beautiful UI       | Days                  | Included       |&lt;br&gt;
  | Tests              | Days                  | Included       |&lt;br&gt;
  | Total              | Weeks                 | Minutes        |&lt;/p&gt;

&lt;p&gt;The math speaks for itself.&lt;/p&gt;




&lt;p&gt;Final Thoughts&lt;/p&gt;

&lt;p&gt;Stop reinventing the wheel. Stop building the same features over and over. Stop wasting time on boilerplate.&lt;/p&gt;

&lt;p&gt;Lara Dashboard gives you a 6-month head start on every Laravel project.&lt;/p&gt;

&lt;p&gt;Clone it. Customize it. Ship it.&lt;/p&gt;

&lt;p&gt;Your clients will thank you. Your deadline will thank you. Your sanity will thank you.&lt;/p&gt;




&lt;p&gt;Ready to try it?&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Demo: &lt;a href="https://demo.laradashboard.com?source=dev.to"&gt;https://demo.laradashboard.com?source=dev.to&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;GitHub: &lt;a href="https://github.com/laradashboard/laradashboard" rel="noopener noreferrer"&gt;https://github.com/laradashboard/laradashboard&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Docs: &lt;a href="https://laradashboard.com/docs" rel="noopener noreferrer"&gt;https://laradashboard.com/docs&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Drop a star on GitHub if you find it useful. And let me know in the comments what features you'd love to see next!&lt;/p&gt;

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




&lt;p&gt;Built with love by the Laravel community. Powered by Lara Dashboard.&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>laravel</category>
      <category>php</category>
      <category>cms</category>
    </item>
    <item>
      <title>Next Generation Admin Template with Laravel for Best Coding practice</title>
      <dc:creator>Maniruzzaman Akash</dc:creator>
      <pubDate>Tue, 26 Aug 2025 20:10:16 +0000</pubDate>
      <link>https://dev.to/maniruzzamanakash/next-generation-admin-template-with-laravel-for-best-coding-practice-3nah</link>
      <guid>https://dev.to/maniruzzamanakash/next-generation-admin-template-with-laravel-for-best-coding-practice-3nah</guid>
      <description>&lt;p&gt;I'm talking today with a Real Admin Dashboard / Laravel based admin template solution, which really matters. Its not some simple CRUD interfaces. Its an architecture for your laravel project, its a standard to build a Laravel based application.&lt;br&gt;
Its a CMS for your Laravel App, Introducing &lt;a href="https://laradashboard.com/" rel="noopener noreferrer"&gt;Lara Dashboard&lt;/a&gt; - &lt;a href="https://github.com/laradashboard/laradashboard" rel="noopener noreferrer"&gt;https://github.com/laradashboard/laradashboard&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Why it matters most:
&lt;/h2&gt;

&lt;p&gt;Its UI - Its UI is clean, minimal, rich for any Laravel starter application.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;All of the core features what you planning to add on your project is already being added.&lt;/li&gt;
&lt;li&gt;In build unit tests with Pest Unit test with Feature, Unit, Browser tests included.&lt;/li&gt;
&lt;li&gt;UI's are clean, minimal and researched.&lt;/li&gt;
&lt;li&gt;Well architectured code.&lt;/li&gt;
&lt;li&gt;Modular and highly extendible, They are planning to add Module marketplace soon and already they have core modules built in, which are rich too.&lt;/li&gt;
&lt;li&gt;Dark mode supported under the hood.&lt;/li&gt;
&lt;li&gt;Beautiful responsive supported.&lt;/li&gt;
&lt;li&gt;Every action is tracked inside Monitoring.&lt;/li&gt;
&lt;li&gt;Role permission management system added.&lt;/li&gt;
&lt;li&gt;Media library added.&lt;/li&gt;
&lt;li&gt;Beautiful blade component library with documentation.&lt;/li&gt;
&lt;li&gt;Easy settings page.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  See some demos before more talking.
&lt;/h2&gt;

&lt;h4&gt;
  
  
  Dashboard
&lt;/h4&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fjop9eusxahbkdv4ior34.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fjop9eusxahbkdv4ior34.png" alt="Dashboard" width="800" height="511"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  User Profile
&lt;/h4&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F00a7ceuncv0fvuck3333.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F00a7ceuncv0fvuck3333.png" alt="User Profile" width="800" height="516"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;And here are some little demos - &lt;/p&gt;

&lt;h4&gt;
  
  
  Media library
&lt;/h4&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fdlgohxbeu66ib5t0w8o7.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fdlgohxbeu66ib5t0w8o7.png" alt=" " width="800" height="500"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  Sign In Page
&lt;/h4&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fik5mfp86ecde165wfk4s.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fik5mfp86ecde165wfk4s.png" alt="Media Library Lara Dashboard" width="800" height="500"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  Module List
&lt;/h4&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3kdv7u5z49y98cmtqaa1.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3kdv7u5z49y98cmtqaa1.png" alt="Module List" width="800" height="500"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;For more, please visit to &lt;a href="https://laradashboard.com/try-demo/" rel="noopener noreferrer"&gt;https://laradashboard.com/try-demo/&lt;/a&gt;&lt;/p&gt;

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

&lt;p&gt;Try Live Demo - &lt;a href="https://laradashboard.com/try-demo/" rel="noopener noreferrer"&gt;https://laradashboard.com/try-demo/&lt;/a&gt;&lt;br&gt;
Github Repo - &lt;a href="https://github.com/laradashboard/laradashboard" rel="noopener noreferrer"&gt;https://github.com/laradashboard/laradashboard&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Feature Request
&lt;/h2&gt;

&lt;p&gt;Any more feature request, please add it here - &lt;a href="https://feedback.laradashboard.com/" rel="noopener noreferrer"&gt;https://feedback.laradashboard.com/&lt;/a&gt;&lt;/p&gt;

</description>
      <category>laravel</category>
      <category>admin</category>
      <category>template</category>
      <category>dashboard</category>
    </item>
    <item>
      <title>Best Admin Template with Laravel for 2025: Lara Dashboard</title>
      <dc:creator>Maniruzzaman Akash</dc:creator>
      <pubDate>Mon, 23 Jun 2025 08:12:53 +0000</pubDate>
      <link>https://dev.to/maniruzzamanakash/best-admin-template-with-laravel-for-2025-lara-dashboard-9b6</link>
      <guid>https://dev.to/maniruzzamanakash/best-admin-template-with-laravel-for-2025-lara-dashboard-9b6</guid>
      <description>&lt;p&gt;In the ever-evolving web development landscape, Laravel continues to dominate as a favorite PHP framework due to its elegant syntax, robust features, and growing ecosystem. For developers seeking to build sophisticated, scalable web applications quickly, the right admin dashboard template can be a game-changer.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Flzvc4da4bedvyiwzwdo4.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Flzvc4da4bedvyiwzwdo4.png" alt="Best Admin Template" width="800" height="454"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Download Now - &lt;a href="https://github.com/laradashboard/laradashboard" rel="noopener noreferrer"&gt;https://github.com/laradashboard/laradashboard&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;As we step into 2025, one admin template stands out from the rest: Lara Dashboard. This article explores why Lara Dashboard is the best Laravel admin template for modern developers and agencies.&lt;/p&gt;

&lt;p&gt;🚀 What is Lara Dashboard?&lt;br&gt;
Lara Dashboard is a fully-featured, premium admin template built specifically for Laravel. It offers seamless integration with Laravel’s backend architecture, making it a perfect starter kit for building advanced web applications, CMSs, SaaS platforms, and admin interfaces.&lt;/p&gt;

&lt;p&gt;It is developed with clean, modular code and modern design aesthetics, ensuring both ease of customization and a great user experience.&lt;/p&gt;

&lt;p&gt;🎯 Key Features&lt;br&gt;
✅ Laravel 10+ Compatibility&lt;br&gt;
Lara Dashboard is fully compatible with the latest Laravel versions, ensuring developers benefit from the most current performance enhancements, security features, and syntax updates.&lt;/p&gt;

&lt;p&gt;🧩 Blade + Livewire Integration&lt;br&gt;
Designed with Laravel Blade components and Livewire integration out-of-the-box, Lara Dashboard enables reactive, dynamic interfaces without writing custom JavaScript.&lt;/p&gt;

&lt;p&gt;🎨 Modern UI &amp;amp; UX&lt;br&gt;
Built using modern UI trends and responsive design, it delivers a polished, intuitive interface across all devices. It uses Bootstrap 5 and is compatible with Tailwind for custom styling needs.&lt;/p&gt;

&lt;p&gt;🔐 Authentication &amp;amp; User Management&lt;br&gt;
Comes pre-configured with Laravel Breeze/Fortify-based authentication and user roles &amp;amp; permissions. This saves hours of initial setup for developers.&lt;/p&gt;

&lt;p&gt;📊 Ready-to-Use Components&lt;br&gt;
Lara Dashboard includes:&lt;/p&gt;

&lt;p&gt;Charts and graphs (via Chart.js &amp;amp; ApexCharts)&lt;/p&gt;

&lt;p&gt;Dynamic data tables&lt;/p&gt;

&lt;p&gt;Calendar integration&lt;/p&gt;

&lt;p&gt;Forms with validation&lt;/p&gt;

&lt;p&gt;File uploads&lt;/p&gt;

&lt;p&gt;Modals, notifications, tabs, and more.&lt;/p&gt;

&lt;p&gt;🧪 Modular &amp;amp; Scalable Code&lt;br&gt;
Code is clean, well-commented, and modularized for scalability. It follows PSR-12 coding standards and Laravel best practices.&lt;/p&gt;

&lt;p&gt;🛠️ Developer Experience&lt;br&gt;
⚙️ Easy Installation&lt;br&gt;
The template comes with a CLI-based installer and complete documentation. Simply run a few artisan commands, and you’re ready to go.&lt;/p&gt;

&lt;p&gt;📦 RESTful API Ready&lt;br&gt;
API scaffolding is built-in, allowing seamless integration with frontend frameworks like Vue.js, React, or mobile apps.&lt;/p&gt;

&lt;p&gt;💼 Perfect for Agencies &amp;amp; Freelancers&lt;br&gt;
Whether you're building a CRM, project management tool, or dashboard for a SaaS app, Lara Dashboard provides the building blocks to launch faster and with confidence.&lt;/p&gt;

&lt;p&gt;📈 Why Lara Dashboard is Best in 2025&lt;br&gt;
Performance First: Optimized asset loading, lazy loading, and minimal dependencies ensure speed and efficiency.&lt;/p&gt;

&lt;p&gt;Ongoing Updates: Frequent updates aligned with Laravel's release cycle ensure stability and future-proofing.&lt;/p&gt;

&lt;p&gt;Community &amp;amp; Support: Active support community and documentation make it easy to troubleshoot and extend functionality.&lt;/p&gt;

&lt;p&gt;Customization: Extensive layout and theme options let developers tweak UI easily for client-specific branding.&lt;/p&gt;

&lt;p&gt;💬 What Developers Are Saying&lt;br&gt;
“Lara Dashboard helped us cut project delivery time by 40%. It’s like Laravel and design thinking had a baby.”&lt;br&gt;
— Adeel K., Software Engineer&lt;/p&gt;

&lt;p&gt;“The Livewire integration was buttery smooth. Zero JavaScript headache.”&lt;br&gt;
— Maria V., Freelance Laravel Developer&lt;/p&gt;

&lt;p&gt;🔗 Get Lara Dashboard&lt;br&gt;
You can get started with Lara Dashboard by visiting the official page (replace with actual URL) or exploring its GitHub repo (if open-source).&lt;/p&gt;

&lt;p&gt;🏁 Final Thoughts&lt;br&gt;
Lara Dashboard sets the gold standard for Laravel admin templates in 2025. With its modern UI, feature-rich components, and deep Laravel integration, it empowers developers to build robust applications faster than ever before.&lt;/p&gt;

&lt;p&gt;If you're planning your next Laravel-based project, Lara Dashboard is not just an option — it's the best choice.&lt;/p&gt;

&lt;p&gt;Download Now - &lt;a href="https://github.com/laradashboard/laradashboard" rel="noopener noreferrer"&gt;https://github.com/laradashboard/laradashboard&lt;/a&gt;&lt;/p&gt;

</description>
      <category>admintemplate</category>
      <category>template</category>
      <category>programming</category>
      <category>admin</category>
    </item>
    <item>
      <title>Advanced Laravel Dashboard for your application in 2025</title>
      <dc:creator>Maniruzzaman Akash</dc:creator>
      <pubDate>Thu, 24 Apr 2025 07:19:35 +0000</pubDate>
      <link>https://dev.to/maniruzzamanakash/advanced-laravel-starter-kit-dashboard-for-your-application-2nma</link>
      <guid>https://dev.to/maniruzzamanakash/advanced-laravel-starter-kit-dashboard-for-your-application-2nma</guid>
      <description>&lt;h2&gt;
  
  
  🚀 Lara Dashboard – A Complete Role &amp;amp; Permission System for Laravel (with Dark Mode, Settings, Modules &amp;amp; More)
&lt;/h2&gt;

&lt;p&gt;Hey Laravel Devs 👋&lt;br&gt;&lt;br&gt;
Tired of rewriting the same Role &amp;amp; Permission logic in every project? Let me introduce you to &lt;strong&gt;&lt;a href="https://github.com/laradashboard/laradashboard" rel="noopener noreferrer"&gt;Lara Dashboard&lt;/a&gt;&lt;/strong&gt; – a powerful Laravel starter kit packed with features to speed up your backend development. It's modular, beautiful, and 100% open-source.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;✅ &lt;strong&gt;Live Demo&lt;/strong&gt;: &lt;a href="https://demo.laradashboard.com" rel="noopener noreferrer"&gt;https://demo.laradashboard.com&lt;/a&gt;&lt;br&gt;&lt;br&gt;
🔐 &lt;strong&gt;Login:&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
&lt;code&gt;Email:&lt;/code&gt; &lt;a href="mailto:superadmin@example.com"&gt;superadmin@example.com&lt;/a&gt;&lt;br&gt;&lt;br&gt;
&lt;code&gt;Password:&lt;/code&gt; 12345678&lt;br&gt;&lt;br&gt;
⭐ &lt;strong&gt;GitHub Repo&lt;/strong&gt;: &lt;a href="https://github.com/laradashboard/laradashboard" rel="noopener noreferrer"&gt;github.com/laradashboard/laradashboard&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;


&lt;h2&gt;
  
  
  🎯 What is Lara Dashboard?
&lt;/h2&gt;

&lt;p&gt;Lara Dashboard is a &lt;strong&gt;modern admin panel&lt;/strong&gt; built with Laravel, Tailwind CSS, and a fully modular structure. It’s designed to give you:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A ready-to-use &lt;strong&gt;Role-Based Access Control&lt;/strong&gt; system&lt;/li&gt;
&lt;li&gt;Clean UI with &lt;strong&gt;dark/light modes&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Advanced user, role, and permission management&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Modular architecture&lt;/strong&gt; to scale your app easily&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Action logs&lt;/strong&gt;, &lt;strong&gt;charts&lt;/strong&gt;, &lt;strong&gt;forms&lt;/strong&gt;, and even &lt;strong&gt;Laravel Pulse&lt;/strong&gt; integration&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Whether you’re building a SaaS platform, admin interface, or internal tool — this dashboard gives you a solid base so you can focus on building features, not scaffolding.&lt;/p&gt;


&lt;h2&gt;
  
  
  🧰 Core Features
&lt;/h2&gt;

&lt;p&gt;✅ Role &amp;amp; Permission System (using &lt;a href="https://github.com/spatie/laravel-permission" rel="noopener noreferrer"&gt;Spatie/Permission&lt;/a&gt;)&lt;br&gt;&lt;br&gt;
🌗 Tailwind UI with Dark/Light Mode&lt;br&gt;&lt;br&gt;
👥 Multi-role User Management&lt;br&gt;&lt;br&gt;
🧩 Modular Development Support&lt;br&gt;&lt;br&gt;
🕵️‍♂️ Admin Impersonation&lt;br&gt;&lt;br&gt;
📈 Dashboard with Charts&lt;br&gt;&lt;br&gt;
📋 Action Logs &amp;amp; Laravel Pulse Monitoring&lt;br&gt;&lt;br&gt;
⚙️ Full Settings Panel (Appearance, Integrations, etc.)&lt;br&gt;&lt;br&gt;
📧 Email Ready (supports Mailtrap, SMTP, etc.)&lt;br&gt;&lt;br&gt;
🔥 Custom Error Pages&lt;br&gt;&lt;br&gt;
🧪 PHPUnit Ready&lt;/p&gt;


&lt;h2&gt;
  
  
  ✨ Visual Sneak Peek
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fcj3azm8qedyox0mgtg3f.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fcj3azm8qedyox0mgtg3f.png" alt="Dashboard Light" width="800" height="491"&gt;&lt;/a&gt;&lt;br&gt;&lt;br&gt;
&lt;em&gt;Light Mode Dashboard&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fs7iim9rsn5784lsy96nn.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fs7iim9rsn5784lsy96nn.png" alt="Dashboard Dark" width="800" height="491"&gt;&lt;/a&gt;&lt;br&gt;&lt;br&gt;
&lt;em&gt;Dark Mode Dashboard&lt;/em&gt;&lt;/p&gt;


&lt;h3&gt;
  
  
  More demos
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Settings&lt;/strong&gt;&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F4prc93men91qsg3goxes.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F4prc93men91qsg3goxes.png" alt="Settings - Lara Dashboard" width="800" height="473"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fbxczbafdnlw24i9t22bx.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fbxczbafdnlw24i9t22bx.png" alt="Settings - Lara Dashboard" width="800" height="473"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F4kaxetmj9x3v73vsrk2m.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F4kaxetmj9x3v73vsrk2m.png" alt="Settings - Lara Dashboard" width="800" height="491"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Users&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fbf4k5g8f1xcjpe0sywon.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fbf4k5g8f1xcjpe0sywon.png" alt="Users - Lara Dashboard" width="800" height="475"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fi6hxrjjxel98rr15omq0.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fi6hxrjjxel98rr15omq0.png" alt="Users - Lara Dashboard" width="800" height="473"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Roles&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fj49lhdimao5zln3y1xoo.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fj49lhdimao5zln3y1xoo.png" alt="Roles - Lara Dashboard" width="800" height="473"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F7v3espyhb4fjff9lsfq0.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F7v3espyhb4fjff9lsfq0.png" alt="Roles - Lara Dashboard" width="800" height="491"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Action Logs&lt;/strong&gt;&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fggbkpmufwri5wofpfprk.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fggbkpmufwri5wofpfprk.png" alt="Action Logs - Lara Dashboard" width="800" height="473"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Laravel Pulse&lt;/strong&gt;&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fpcdhkigiyxvphxso36xl.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fpcdhkigiyxvphxso36xl.png" alt="Laravel Pulse - Lara Dashboard" width="800" height="496"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Forget password&lt;/strong&gt;&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fa8yxw94ruzx7mjq6rb7g.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fa8yxw94ruzx7mjq6rb7g.png" alt="Image description" width="800" height="527"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Modules&lt;/strong&gt;&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fmucssp6740gu0bw9veai.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fmucssp6740gu0bw9veai.png" alt="Modules - Lara Dashboard" width="800" height="491"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  🛠️ Quick Installation Guide
&lt;/h2&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git clone git@github.com:laradashboard/laradashboard.git
&lt;span class="nb"&gt;cd &lt;/span&gt;laradashboard
composer &lt;span class="nb"&gt;install
&lt;/span&gt;npm &lt;span class="nb"&gt;install
cp&lt;/span&gt; .env.example .env
php artisan key:generate
php artisan storage:link
php artisan migrate:fresh &lt;span class="nt"&gt;--seed&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; php artisan module:seed
php artisan serve
npm run dev
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;Visit: &lt;a href="http://localhost:8000" rel="noopener noreferrer"&gt;http://localhost:8000&lt;/a&gt;&lt;br&gt;&lt;br&gt;
Login with the demo credentials and you’re in 🚪&lt;/p&gt;


&lt;h2&gt;
  
  
  💡 Why Developers Love It
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Time Saver&lt;/strong&gt;: Avoid rebuilding roles, permissions, and dashboards for every project.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Modular&lt;/strong&gt;: Easily extend with modules like CRM, HRM, Course Management.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Production Ready&lt;/strong&gt;: Includes settings panel, password reset, profile management, etc.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Clean &amp;amp; Scalable&lt;/strong&gt;: Separation of concerns using services, helpers, and modules.&lt;/li&gt;
&lt;/ul&gt;


&lt;h2&gt;
  
  
  🔌 Mail Setup (Optional)
&lt;/h2&gt;

&lt;p&gt;Testing email flows? Use &lt;a href="https://mailtrap.io/" rel="noopener noreferrer"&gt;Mailtrap&lt;/a&gt; with this config:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;MAIL_MAILER=smtp
MAIL_HOST=sandbox.smtp.mailtrap.io
MAIL_PORT=587
MAIL_USERNAME=your-username
MAIL_PASSWORD=your-password
MAIL_ENCRYPTION=tls
MAIL_FROM_ADDRESS=you@example.com
MAIL_FROM_NAME="${APP_NAME}"
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  🌟 Contribute &amp;amp; Support
&lt;/h2&gt;

&lt;p&gt;Lara Dashboard is fully open-source and made with ❤️ by &lt;a href="https://github.com/ManiruzzamanAkash" rel="noopener noreferrer"&gt;Maniruzzaman Akash&lt;/a&gt;.&lt;br&gt;&lt;br&gt;
If it helps you:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Give it a ⭐ on GitHub&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/laradashboard/laradashboard/pulls" rel="noopener noreferrer"&gt;Submit a PR&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.patreon.com/maniruzzaman" rel="noopener noreferrer"&gt;Buy a coffee ☕ on Patreon&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  🔮 What’s Coming Next?
&lt;/h2&gt;

&lt;p&gt;Premium modules are on the way at &lt;a href="https://laradashboard.com" rel="noopener noreferrer"&gt;laradashboard.com&lt;/a&gt;, including:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;CRM
&lt;/li&gt;
&lt;li&gt;HRM
&lt;/li&gt;
&lt;li&gt;Course Management
&lt;/li&gt;
&lt;li&gt;...and more!&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  🗣 Final Words
&lt;/h2&gt;

&lt;p&gt;If you’re working on a Laravel project and want a &lt;strong&gt;ready-made admin panel&lt;/strong&gt; with role management, modularity, and gorgeous UI — Lara Dashboard will save you hours of work.&lt;/p&gt;

&lt;p&gt;Check it out, clone it, star it, and let’s build amazing things together! 🚀&lt;br&gt;&lt;br&gt;
👉 &lt;a href="https://github.com/laradashboard/laradashboard" rel="noopener noreferrer"&gt;https://github.com/laradashboard/laradashboard&lt;/a&gt;&lt;/p&gt;




&lt;p&gt;Let me know if you'd like a &lt;strong&gt;preview thumbnail&lt;/strong&gt;, &lt;strong&gt;meta description&lt;/strong&gt;, or &lt;strong&gt;social share banner&lt;/strong&gt; to go with your Dev.to post — I can create those too!&lt;/p&gt;

</description>
      <category>laravel</category>
      <category>dashboard</category>
      <category>tailwindcss</category>
      <category>react</category>
    </item>
    <item>
      <title>How to Build a Beautiful Todo Application Using React JS and Custom CSS</title>
      <dc:creator>Maniruzzaman Akash</dc:creator>
      <pubDate>Sun, 01 Dec 2024 11:57:41 +0000</pubDate>
      <link>https://dev.to/maniruzzamanakash/how-to-build-a-beautiful-todo-application-using-react-js-and-custom-css-3385</link>
      <guid>https://dev.to/maniruzzamanakash/how-to-build-a-beautiful-todo-application-using-react-js-and-custom-css-3385</guid>
      <description>&lt;p&gt;In this post, we'll walk through building a fully functional Todo application using React JS, custom CSS, and the &lt;a href="https://simplecrudapi.com" rel="noopener noreferrer"&gt;SimpleCRUD API&lt;/a&gt; to handle backend operations like data fetching, pagination, creation, updates, and deletions.&lt;br&gt;
The SimpleCRUD API simplifies backend complexities, letting us focus on building the UI and handling interactions effectively. Let's dive into the components of the application.&lt;/p&gt;


&lt;h2&gt;
  
  
  Setting Up the Environment
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Required Libraries&lt;/strong&gt;&lt;br&gt;
Ensure you have the following libraries installed in your React project. These are already mentioned in your package.json:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;React &amp;amp; React-DOM: For building the UI.&lt;/li&gt;
&lt;li&gt;Axios: For making HTTP requests to the SimpleCRUD API.&lt;/li&gt;
&lt;li&gt;React Icons: For icons to improve user experience.&lt;/li&gt;
&lt;li&gt;date-fns: For formatting dates.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;
  
  
  Project Structure
&lt;/h2&gt;

&lt;p&gt;Here's how the project is structured - its using create-react-app.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;/public
  /index.html
/src
  api.js
  App.js
  styles.css
  index.js
package.json
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Backend API Integration
&lt;/h2&gt;

&lt;p&gt;The &lt;code&gt;src/api.js&lt;/code&gt; file handles all the interactions with the SimpleCRUD API.&lt;/p&gt;

&lt;p&gt;Simple CRUD API Docs for Todos - &lt;a href="https://simplecrudapi.com/docs/todos" rel="noopener noreferrer"&gt;https://simplecrudapi.com/docs/todos&lt;/a&gt;&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="k"&gt;import&lt;/span&gt; &lt;span class="nx"&gt;axios&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;axios&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;API_URL&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;https://simplecrudapi.com/api/todos&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;getTodos&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;async &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;params&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="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;apiUrl&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;`&lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;API_URL&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;?orderBy=id&amp;amp;orderDirection=desc`&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;response&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;axios&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;apiUrl&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;params&lt;/span&gt; &lt;span class="p"&gt;});&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;data&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;meta&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;response&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;data&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;data&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;meta&lt;/span&gt; &lt;span class="p"&gt;};&lt;/span&gt;
&lt;span class="p"&gt;};&lt;/span&gt;

&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;createTodo&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;async &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;todo&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;todo&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;user_id&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;response&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;axios&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;post&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;API_URL&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;todo&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;response&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;data&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;data&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;};&lt;/span&gt;

&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;updateTodo&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;async &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;id&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;todo&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;todo&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;user_id&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;response&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;axios&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;put&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;`&lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;API_URL&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;/&lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;id&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;`&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;todo&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;response&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;data&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;data&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;};&lt;/span&gt;

&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;deleteTodo&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;async &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;id&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="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;response&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;axios&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="k"&gt;delete&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;`&lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;API_URL&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;/&lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;id&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;`&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;response&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;data&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;data&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;ul&gt;
&lt;li&gt;
&lt;strong&gt;getTodos:&lt;/strong&gt; Fetches a paginated list of todos.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;createTodo:&lt;/strong&gt; Creates a new todo.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;updateTodo:&lt;/strong&gt; Updates an existing todo.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;deleteTodo:&lt;/strong&gt; Deletes a todo by its ID.&lt;/li&gt;
&lt;/ul&gt;

&lt;ol&gt;
&lt;li&gt;Application Logic
File: App.js
This file contains the main application logic:
State management for todos, form data, pagination, and editing.
CRUD operations: Fetch, add, edit, and delete todos.
Pagination controls: Navigate through pages of todos.&lt;/li&gt;
&lt;/ol&gt;




&lt;p&gt;Walkthrough&lt;br&gt;
Initial Setup&lt;br&gt;
Use useState to manage the app's state, including todos and pagination details.&lt;br&gt;
Use useEffect to fetch todos when the page loads or pagination state changes.&lt;/p&gt;

&lt;p&gt;Todo Operations&lt;br&gt;
Add a new todo or update an existing one using handleSubmit.&lt;br&gt;
Delete a todo with handleDelete.&lt;br&gt;
Edit a todo by populating the form fields with the selected todo's data.&lt;/p&gt;

&lt;p&gt;Pagination&lt;br&gt;
Handle pagination using changePage to navigate between pages.&lt;/p&gt;


&lt;h2&gt;
  
  
  Key Code&amp;nbsp;Snippets
&lt;/h2&gt;
&lt;h3&gt;
  
  
  Fetching Todos
&lt;/h3&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;fetchTodos&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;async &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;page&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;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;try&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;data&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;meta&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nf"&gt;getTodos&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="nx"&gt;page&lt;/span&gt; &lt;span class="p"&gt;});&lt;/span&gt;
    &lt;span class="nf"&gt;setTodos&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;data&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
        &lt;span class="nf"&gt;setPagination&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="nx"&gt;prev&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="p"&gt;...&lt;/span&gt;&lt;span class="nx"&gt;prev&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
          &lt;span class="na"&gt;currentPage&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;meta&lt;/span&gt;&lt;span class="p"&gt;?.&lt;/span&gt;&lt;span class="nx"&gt;current_page&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="na"&gt;lastPage&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;meta&lt;/span&gt;&lt;span class="p"&gt;?.&lt;/span&gt;&lt;span class="nx"&gt;last_page&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="na"&gt;total&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;meta&lt;/span&gt;&lt;span class="p"&gt;?.&lt;/span&gt;&lt;span class="nx"&gt;total&lt;/span&gt; &lt;span class="o"&gt;||&lt;/span&gt; &lt;span class="mi"&gt;0&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="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="s2"&gt;Failed to fetch todos:&lt;/span&gt;&lt;span class="dl"&gt;"&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="nf"&gt;setTodos&lt;/span&gt;&lt;span class="p"&gt;([]);&lt;/span&gt;
        &lt;span class="nf"&gt;setPagination&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="nx"&gt;prev&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="p"&gt;...&lt;/span&gt;&lt;span class="nx"&gt;prev&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
          &lt;span class="na"&gt;currentPage&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
          &lt;span class="na"&gt;lastPage&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
          &lt;span class="na"&gt;total&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="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;
  
  
  Handling Submit
&lt;/h3&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;handleSubmit&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;async &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;e&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;e&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;preventDefault&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
  &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;editingId&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nf"&gt;updateTodo&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;editingId&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;form&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="nf"&gt;setEditingId&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;else&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nf"&gt;createTodo&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;form&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;

  &lt;span class="nf"&gt;setForm&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="na"&gt;title&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;""&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;description&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;""&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;completed&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt; &lt;span class="p"&gt;});&lt;/span&gt;
  &lt;span class="nf"&gt;fetchTodos&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;pagination&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;currentPage&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;
  
  
  Pagination
&lt;/h3&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;changePage&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;newPage&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="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;newPage&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="nx"&gt;newPage&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;=&lt;/span&gt; &lt;span class="nx"&gt;pagination&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;lastPage&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nf"&gt;setPagination&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="nx"&gt;prev&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="p"&gt;...&lt;/span&gt;&lt;span class="nx"&gt;prev&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;currentPage&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;newPage&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;h2&gt;
  
  
  Styling the Application
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;File: styles.css&lt;/strong&gt;&lt;br&gt;
The CSS file defines a sleek and modern look for the Todo app:&lt;br&gt;
Animations: Subtle fadeIn and slideIn animations enhance user experience.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Responsiveness:&lt;/strong&gt; Styles adapt well to various screen sizes.&lt;br&gt;
Visual hierarchy: Clear distinction between buttons, input fields, and todo items.&lt;/p&gt;


&lt;h2&gt;
  
  
  Running the Application
&lt;/h2&gt;
&lt;h3&gt;
  
  
  Install Dependencies
&lt;/h3&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npx create-react-app my-todo
&lt;span class="nb"&gt;cd &lt;/span&gt;my-todo
npm start
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;h3&gt;
  
  
  Install Extra Dependencies
&lt;/h3&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npm &lt;span class="nb"&gt;install &lt;/span&gt;axios react-icons date-fns
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;h2&gt;
  
  
  Interact with the App
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Add new todos using the form.&lt;/li&gt;
&lt;li&gt;Edit existing todos by clicking the edit button.&lt;/li&gt;
&lt;li&gt;Delete todos by clicking the delete button.&lt;/li&gt;
&lt;li&gt;Navigate through pages of todos using the pagination controls.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;
  
  
  Complete Source&amp;nbsp;code
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;The src/App.js file -&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight jsx"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nx"&gt;React&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;useEffect&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;useState&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;react&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;format&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;date-fns&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="c1"&gt;// Importing date-fns&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;getTodos&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;createTodo&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;updateTodo&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;deleteTodo&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;./api&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;AiOutlineDelete&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;AiOutlineEdit&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;react-icons/ai&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;./styles.css&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;App&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;todos&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;setTodos&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;useState&lt;/span&gt;&lt;span class="p"&gt;([]);&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;form&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;setForm&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;useState&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
    &lt;span class="na"&gt;title&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;""&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;description&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;""&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;completed&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="p"&gt;});&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;editingId&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;setEditingId&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;useState&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;pagination&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;setPagination&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;useState&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
    &lt;span class="na"&gt;currentPage&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;lastPage&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;perPage&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;total&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="p"&gt;});&lt;/span&gt;

  &lt;span class="nf"&gt;useEffect&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="nf"&gt;fetchTodos&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;pagination&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;currentPage&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="nx"&gt;pagination&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;currentPage&lt;/span&gt;&lt;span class="p"&gt;]);&lt;/span&gt;

  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;fetchTodos&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;async &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;page&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;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;try&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;data&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;meta&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nf"&gt;getTodos&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="nx"&gt;page&lt;/span&gt; &lt;span class="p"&gt;});&lt;/span&gt;

      &lt;span class="nf"&gt;setTodos&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;data&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
      &lt;span class="nf"&gt;setPagination&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="nx"&gt;prev&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="p"&gt;...&lt;/span&gt;&lt;span class="nx"&gt;prev&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="na"&gt;currentPage&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;meta&lt;/span&gt;&lt;span class="p"&gt;?.&lt;/span&gt;&lt;span class="nx"&gt;current_page&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="na"&gt;lastPage&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;meta&lt;/span&gt;&lt;span class="p"&gt;?.&lt;/span&gt;&lt;span class="nx"&gt;last_page&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="na"&gt;total&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;meta&lt;/span&gt;&lt;span class="p"&gt;?.&lt;/span&gt;&lt;span class="nx"&gt;total&lt;/span&gt; &lt;span class="o"&gt;||&lt;/span&gt; &lt;span class="mi"&gt;0&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="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="s2"&gt;Failed to fetch todos:&lt;/span&gt;&lt;span class="dl"&gt;"&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="nf"&gt;setTodos&lt;/span&gt;&lt;span class="p"&gt;([]);&lt;/span&gt;
      &lt;span class="nf"&gt;setPagination&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="nx"&gt;prev&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="p"&gt;...&lt;/span&gt;&lt;span class="nx"&gt;prev&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="na"&gt;currentPage&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="na"&gt;lastPage&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="na"&gt;total&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="p"&gt;}));&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
  &lt;span class="p"&gt;};&lt;/span&gt;

  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;handleSubmit&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;async &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;e&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;e&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;preventDefault&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
    &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;editingId&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nf"&gt;updateTodo&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;editingId&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;form&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
      &lt;span class="nf"&gt;setEditingId&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;else&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nf"&gt;createTodo&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;form&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;

    &lt;span class="nf"&gt;setForm&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="na"&gt;title&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;""&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;description&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;""&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;completed&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt; &lt;span class="p"&gt;});&lt;/span&gt;
    &lt;span class="nf"&gt;fetchTodos&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;pagination&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;currentPage&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="p"&gt;};&lt;/span&gt;

  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;handleEdit&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;todo&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="nf"&gt;setEditingId&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;todo&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;id&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="nf"&gt;setForm&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
      &lt;span class="na"&gt;title&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;todo&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;title&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="na"&gt;description&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;todo&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;description&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="na"&gt;completed&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;todo&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;completed&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="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;handleDelete&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;async &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;id&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="k"&gt;await&lt;/span&gt; &lt;span class="nf"&gt;deleteTodo&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;id&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="nf"&gt;fetchTodos&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;pagination&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;currentPage&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="p"&gt;};&lt;/span&gt;

  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;changePage&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;newPage&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="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;newPage&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="nx"&gt;newPage&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;=&lt;/span&gt; &lt;span class="nx"&gt;pagination&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;lastPage&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="nf"&gt;setPagination&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="nx"&gt;prev&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="p"&gt;...&lt;/span&gt;&lt;span class="nx"&gt;prev&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;currentPage&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;newPage&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;return &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;div&lt;/span&gt; &lt;span class="na"&gt;className&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"app-container"&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
      &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;div&lt;/span&gt; &lt;span class="na"&gt;className&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"todo-wrapper"&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
        &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;h1&lt;/span&gt; &lt;span class="na"&gt;className&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"app-title"&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;My Todos&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;h1&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
        &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;p&lt;/span&gt; &lt;span class="na"&gt;className&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"app-description"&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
          By Simple CRUD API →&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt; &lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;
          &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;a&lt;/span&gt; &lt;span class="na"&gt;href&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"https://simplecrudapi.com/docs/todos"&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;Todo API link&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;a&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
        &lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;p&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;

        &lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="cm"&gt;/* Form */&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;
        &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;form&lt;/span&gt; &lt;span class="na"&gt;onSubmit&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;handleSubmit&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt; &lt;span class="na"&gt;className&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"todo-form"&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
          &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;input&lt;/span&gt;
            &lt;span class="na"&gt;type&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"text"&lt;/span&gt;
            &lt;span class="na"&gt;placeholder&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"Title"&lt;/span&gt;
            &lt;span class="na"&gt;value&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;form&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;title&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;
            &lt;span class="na"&gt;onChange&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;e&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nf"&gt;setForm&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="p"&gt;...&lt;/span&gt;&lt;span class="nx"&gt;form&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;title&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;e&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;target&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;value&lt;/span&gt; &lt;span class="p"&gt;})&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;
            &lt;span class="na"&gt;className&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"todo-input"&lt;/span&gt;
            &lt;span class="na"&gt;required&lt;/span&gt;
          &lt;span class="p"&gt;/&amp;gt;&lt;/span&gt;
          &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;textarea&lt;/span&gt;
            &lt;span class="na"&gt;placeholder&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"Description"&lt;/span&gt;
            &lt;span class="na"&gt;value&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;form&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;description&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;
            &lt;span class="na"&gt;onChange&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;e&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nf"&gt;setForm&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="p"&gt;...&lt;/span&gt;&lt;span class="nx"&gt;form&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;description&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;e&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;target&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;value&lt;/span&gt; &lt;span class="p"&gt;})&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;
            &lt;span class="na"&gt;className&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"todo-textarea"&lt;/span&gt;
            &lt;span class="na"&gt;required&lt;/span&gt;
          &lt;span class="p"&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;textarea&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
          &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;div&lt;/span&gt; &lt;span class="na"&gt;className&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"todo-checkbox-wrapper"&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
            &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;input&lt;/span&gt;
              &lt;span class="na"&gt;type&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"checkbox"&lt;/span&gt;
              &lt;span class="na"&gt;checked&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;form&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;completed&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;
              &lt;span class="na"&gt;onChange&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;e&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt;
                &lt;span class="nf"&gt;setForm&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="p"&gt;...&lt;/span&gt;&lt;span class="nx"&gt;form&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;completed&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;e&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;target&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;checked&lt;/span&gt; &lt;span class="p"&gt;})&lt;/span&gt;
              &lt;span class="si"&gt;}&lt;/span&gt;
              &lt;span class="na"&gt;className&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"todo-checkbox"&lt;/span&gt;
            &lt;span class="p"&gt;/&amp;gt;&lt;/span&gt;
            &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;label&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;Completed&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;label&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
          &lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;div&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
          &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;button&lt;/span&gt; &lt;span class="na"&gt;type&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"submit"&lt;/span&gt; &lt;span class="na"&gt;className&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"todo-button"&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
            &lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;editingId&lt;/span&gt; &lt;span class="p"&gt;?&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Update&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="s2"&gt;Add&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt; Todo
          &lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;button&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
        &lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;form&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;

        &lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="cm"&gt;/* Todo List */&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;
        &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;div&lt;/span&gt; &lt;span class="na"&gt;className&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"todo-list"&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
          &lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;todos&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;map&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="nx"&gt;todo&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="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;div&lt;/span&gt; &lt;span class="na"&gt;key&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;todo&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;id&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt; &lt;span class="na"&gt;className&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"todo-item"&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
              &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;div&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
                &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;h2&lt;/span&gt;
                  &lt;span class="na"&gt;className&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="s2"&gt;`todo-title &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;todo&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;completed&lt;/span&gt; &lt;span class="p"&gt;?&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;completed&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="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;`&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;
                &lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
                  &lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;todo&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;title&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;
                &lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;h2&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
                &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;p&lt;/span&gt; &lt;span class="na"&gt;className&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"todo-description"&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;todo&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;description&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;p&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
                &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;p&lt;/span&gt; &lt;span class="na"&gt;className&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"todo-updated-at"&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
                  Last updated:&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt; &lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;
                  &lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;todo&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;updated_at&lt;/span&gt;
                    &lt;span class="p"&gt;?&lt;/span&gt; &lt;span class="nf"&gt;format&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;Date&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;todo&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;updated_at&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;MMM d, yyyy h:mm a&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="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;N/A&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;
                &lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;p&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
              &lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;div&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
              &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;div&lt;/span&gt; &lt;span class="na"&gt;className&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"todo-actions"&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
                &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;button&lt;/span&gt;
                  &lt;span class="na"&gt;onClick&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nf"&gt;handleEdit&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;todo&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;
                  &lt;span class="na"&gt;className&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"edit-button"&lt;/span&gt;
                &lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
                  &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nc"&gt;AiOutlineEdit&lt;/span&gt; &lt;span class="p"&gt;/&amp;gt;&lt;/span&gt;
                &lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;button&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
                &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;button&lt;/span&gt;
                  &lt;span class="na"&gt;onClick&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nf"&gt;handleDelete&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;todo&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;id&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;
                  &lt;span class="na"&gt;className&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"delete-button"&lt;/span&gt;
                &lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
                  &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nc"&gt;AiOutlineDelete&lt;/span&gt; &lt;span class="p"&gt;/&amp;gt;&lt;/span&gt;
                &lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;button&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
              &lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;div&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
            &lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;div&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
          &lt;span class="p"&gt;))&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;
        &lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;div&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;

        &lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="cm"&gt;/* Pagination */&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;
        &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;div&lt;/span&gt; &lt;span class="na"&gt;className&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"pagination"&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
          &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;button&lt;/span&gt;
            &lt;span class="na"&gt;className&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"pagination-button"&lt;/span&gt;
            &lt;span class="na"&gt;onClick&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nf"&gt;changePage&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;pagination&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;currentPage&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="si"&gt;}&lt;/span&gt;
            &lt;span class="na"&gt;disabled&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;pagination&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;currentPage&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;
          &lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
            &lt;span class="ni"&gt;&amp;amp;laquo;&lt;/span&gt; Previous
          &lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;button&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
          &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;span&lt;/span&gt; &lt;span class="na"&gt;className&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"pagination-info"&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
            Page &lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;pagination&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;currentPage&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt; of &lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;pagination&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;lastPage&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;
          &lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;span&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
          &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;button&lt;/span&gt;
            &lt;span class="na"&gt;className&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"pagination-button"&lt;/span&gt;
            &lt;span class="na"&gt;onClick&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nf"&gt;changePage&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;pagination&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;currentPage&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="si"&gt;}&lt;/span&gt;
            &lt;span class="na"&gt;disabled&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;pagination&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;currentPage&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="nx"&gt;pagination&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;lastPage&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;
          &lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
            Next &lt;span class="ni"&gt;&amp;amp;raquo;&lt;/span&gt;
          &lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;button&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
        &lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;div&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
      &lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;div&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;

      &lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="cm"&gt;/* Footer */&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;
      &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;footer&lt;/span&gt; &lt;span class="na"&gt;className&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"app-footer"&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
        Powered by&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt; &lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;
        &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;a&lt;/span&gt;
          &lt;span class="na"&gt;href&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"https://simplecrudapi.com"&lt;/span&gt;
          &lt;span class="na"&gt;target&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"_blank"&lt;/span&gt;
          &lt;span class="na"&gt;rel&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"noopener noreferrer"&lt;/span&gt;
        &lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
          simplecrudapi.com
        &lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;a&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
      &lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;footer&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;div&lt;/span&gt;&lt;span class="p"&gt;&amp;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;export&lt;/span&gt; &lt;span class="k"&gt;default&lt;/span&gt; &lt;span class="nx"&gt;App&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;The src/styles.css file -&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight css"&gt;&lt;code&gt;&lt;span class="c"&gt;/* General App Styles */&lt;/span&gt;
&lt;span class="nc"&gt;.app-container&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;font-family&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s1"&gt;"Roboto"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;Arial&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nb"&gt;sans-serif&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;background&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;linear-gradient&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="m"&gt;135deg&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="m"&gt;#f0f8ff&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="m"&gt;#e0e7ff&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="nl"&gt;min-height&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;100vh&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;display&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;flex&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;flex-direction&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;column&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;align-items&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;center&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;padding&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;20px&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;box-sizing&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;border-box&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="nc"&gt;.todo-wrapper&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;max-width&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;650px&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;width&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;100%&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;background&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;#fff&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;padding&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;25px&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;border-radius&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;12px&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;box-shadow&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;0&lt;/span&gt; &lt;span class="m"&gt;8px&lt;/span&gt; &lt;span class="m"&gt;15px&lt;/span&gt; &lt;span class="n"&gt;rgba&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="m"&gt;0.1&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="nl"&gt;animation&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;fadeIn&lt;/span&gt; &lt;span class="m"&gt;0.8s&lt;/span&gt; &lt;span class="n"&gt;ease-in-out&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="k"&gt;@keyframes&lt;/span&gt; &lt;span class="n"&gt;fadeIn&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nt"&gt;from&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nl"&gt;opacity&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nl"&gt;transform&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;scale&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="m"&gt;0.95&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
  &lt;span class="nt"&gt;to&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nl"&gt;opacity&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nl"&gt;transform&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;scale&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="m"&gt;1&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="nc"&gt;.app-title&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;font-size&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;28px&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;font-weight&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;bold&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;text-align&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;center&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;color&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;#2c3e50&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;margin-bottom&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;12px&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="nc"&gt;.app-description&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;text-align&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;center&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;font-size&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;14px&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;margin-bottom&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;25px&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;color&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;#34495e&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="nc"&gt;.app-description&lt;/span&gt; &lt;span class="nt"&gt;a&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;color&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;#3498db&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;text-decoration&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;none&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;font-weight&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;500&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="nc"&gt;.app-description&lt;/span&gt; &lt;span class="nt"&gt;a&lt;/span&gt;&lt;span class="nd"&gt;:hover&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;text-decoration&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;underline&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="c"&gt;/* Form Styles */&lt;/span&gt;
&lt;span class="nc"&gt;.todo-form&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;margin-bottom&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;25px&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="nc"&gt;.todo-input&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;
&lt;span class="nc"&gt;.todo-textarea&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;width&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;100%&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;padding&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;12px&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;margin-bottom&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;12px&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;border&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;1px&lt;/span&gt; &lt;span class="nb"&gt;solid&lt;/span&gt; &lt;span class="m"&gt;#dcdfe6&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;border-radius&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;6px&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;font-size&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;14px&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;box-sizing&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;border-box&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;transition&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;border-color&lt;/span&gt; &lt;span class="m"&gt;0.3s&lt;/span&gt; &lt;span class="n"&gt;ease&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="nc"&gt;.todo-input&lt;/span&gt;&lt;span class="nd"&gt;:focus&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;
&lt;span class="nc"&gt;.todo-textarea&lt;/span&gt;&lt;span class="nd"&gt;:focus&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;outline&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;none&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;border-color&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;#007bff&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="nc"&gt;.todo-textarea&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;height&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;90px&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;resize&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;none&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="nc"&gt;.todo-checkbox-wrapper&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;display&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;flex&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;align-items&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;center&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;margin-bottom&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;12px&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="nc"&gt;.todo-checkbox&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;margin-right&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;8px&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="nc"&gt;.todo-button&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;display&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;block&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;width&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;100%&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;padding&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;12px&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;background&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;#4caf50&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;color&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="no"&gt;white&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;border&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;none&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;border-radius&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;6px&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;cursor&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;pointer&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;font-size&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;16px&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;font-weight&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;bold&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;transition&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;all&lt;/span&gt; &lt;span class="m"&gt;0.3s&lt;/span&gt; &lt;span class="n"&gt;ease&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="nc"&gt;.todo-button&lt;/span&gt;&lt;span class="nd"&gt;:hover&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;background&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;#45a049&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;transform&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;translateY&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="m"&gt;-2px&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="nl"&gt;box-shadow&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;0&lt;/span&gt; &lt;span class="m"&gt;4px&lt;/span&gt; &lt;span class="m"&gt;6px&lt;/span&gt; &lt;span class="n"&gt;rgba&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="m"&gt;0.15&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="c"&gt;/* Todo List Styles */&lt;/span&gt;
&lt;span class="nc"&gt;.todo-list&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;margin-top&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;20px&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="nc"&gt;.todo-item&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;display&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;flex&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;justify-content&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;space-between&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;align-items&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;center&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;background&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;#fdfdfd&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;padding&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;15px&lt;/span&gt; &lt;span class="m"&gt;20px&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;border&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;1px&lt;/span&gt; &lt;span class="nb"&gt;solid&lt;/span&gt; &lt;span class="m"&gt;#ddd&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;border-radius&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;8px&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;margin-bottom&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;12px&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;box-shadow&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;0&lt;/span&gt; &lt;span class="m"&gt;4px&lt;/span&gt; &lt;span class="m"&gt;6px&lt;/span&gt; &lt;span class="n"&gt;rgba&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="m"&gt;0.05&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="nl"&gt;transition&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;all&lt;/span&gt; &lt;span class="m"&gt;0.3s&lt;/span&gt; &lt;span class="n"&gt;ease&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;animation&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;slideIn&lt;/span&gt; &lt;span class="m"&gt;0.5s&lt;/span&gt; &lt;span class="n"&gt;ease&lt;/span&gt; &lt;span class="n"&gt;forwards&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;overflow-x&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;hidden&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="py"&gt;gap&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;10px&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="nc"&gt;.todo-item&lt;/span&gt;&lt;span class="nd"&gt;:hover&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;transform&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;translateY&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="m"&gt;-2px&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="nl"&gt;box-shadow&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;0&lt;/span&gt; &lt;span class="m"&gt;6px&lt;/span&gt; &lt;span class="m"&gt;10px&lt;/span&gt; &lt;span class="n"&gt;rgba&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="m"&gt;0.1&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="k"&gt;@keyframes&lt;/span&gt; &lt;span class="n"&gt;slideIn&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nt"&gt;from&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nl"&gt;opacity&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nl"&gt;transform&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;translateX&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="m"&gt;-20px&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
  &lt;span class="nt"&gt;to&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nl"&gt;opacity&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nl"&gt;transform&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;translateX&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="m"&gt;0&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="nc"&gt;.todo-title&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;font-size&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;18px&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;font-weight&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;bold&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;margin&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;color&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;#2c3e50&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;word-wrap&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;break-word&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;word-break&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;break-word&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;overflow-wrap&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;break-word&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="nc"&gt;.todo-title.completed&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;text-decoration&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;line-through&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;color&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;#7f8c8d&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="nc"&gt;.todo-description&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;font-size&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;15px&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;color&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;#95a5a6&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;margin&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;5px&lt;/span&gt; &lt;span class="m"&gt;0&lt;/span&gt; &lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;word-wrap&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;break-word&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;word-break&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;break-word&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;overflow-wrap&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;break-word&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="nc"&gt;.todo-actions&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;display&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;flex&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="py"&gt;gap&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;10px&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="nc"&gt;.edit-button&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;
&lt;span class="nc"&gt;.delete-button&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;background&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;none&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;border&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;none&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;cursor&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;pointer&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;font-size&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;20px&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;transition&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;all&lt;/span&gt; &lt;span class="m"&gt;0.3s&lt;/span&gt; &lt;span class="n"&gt;ease&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="nc"&gt;.edit-button&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;color&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;#3498db&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="nc"&gt;.edit-button&lt;/span&gt;&lt;span class="nd"&gt;:hover&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;color&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;#2980b9&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;transform&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;scale&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="m"&gt;1.1&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="nc"&gt;.delete-button&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;color&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;#e74c3c&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="nc"&gt;.delete-button&lt;/span&gt;&lt;span class="nd"&gt;:hover&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;color&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;#c0392b&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;transform&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;scale&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="m"&gt;1.1&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="c"&gt;/* Pagination Styles */&lt;/span&gt;
&lt;span class="nc"&gt;.pagination&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;display&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;flex&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;justify-content&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;center&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;align-items&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;center&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="py"&gt;gap&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;15px&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;margin-top&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;20px&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="nc"&gt;.pagination-button&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;background&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;#3498db&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;color&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="no"&gt;white&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;padding&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;10px&lt;/span&gt; &lt;span class="m"&gt;15px&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;border&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;none&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;border-radius&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;6px&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;cursor&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;pointer&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;font-size&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;14px&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;transition&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;all&lt;/span&gt; &lt;span class="m"&gt;0.3s&lt;/span&gt; &lt;span class="n"&gt;ease&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="nc"&gt;.pagination-button&lt;/span&gt;&lt;span class="nd"&gt;:hover&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;background&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;#2980b9&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;transform&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;translateY&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="m"&gt;-2px&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="nc"&gt;.pagination-button&lt;/span&gt;&lt;span class="nd"&gt;:disabled&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;background&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;#95a5a6&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;cursor&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;not-allowed&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="nc"&gt;.pagination-info&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;font-size&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;14px&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;color&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;#2c3e50&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="c"&gt;/* Footer Styles */&lt;/span&gt;
&lt;span class="nc"&gt;.app-footer&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;margin-top&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;30px&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;text-align&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;center&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;font-size&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;14px&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;color&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;#555&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="nc"&gt;.app-footer&lt;/span&gt; &lt;span class="nt"&gt;a&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;color&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;#3498db&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;text-decoration&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;none&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="nc"&gt;.app-footer&lt;/span&gt; &lt;span class="nt"&gt;a&lt;/span&gt;&lt;span class="nd"&gt;:hover&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;text-decoration&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;underline&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="nc"&gt;.todo-updated-at&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;font-size&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;12px&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;color&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;#7f8c8d&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;margin-top&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;5px&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;In &lt;code&gt;package.json&lt;/code&gt; -&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"name"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"react"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"version"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"1.0.0"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"description"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;""&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"keywords"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[],&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"main"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"src/index.tsx"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"dependencies"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"react"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"^18.0.0"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"react-dom"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"^18.0.0"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"react-scripts"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"^5.0.0"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"axios"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"1.7.7"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"react-icons"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"5.3.0"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"date-fns"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"4.1.0"&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"devDependencies"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"@types/react"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"18.2.38"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"@types/react-dom"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"18.2.15"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"loader-utils"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"3.2.1"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"typescript"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"4.4.4"&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"scripts"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"start"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"react-scripts start"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"build"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"react-scripts build"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"test"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"react-scripts test --env=jsdom"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"eject"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"react-scripts eject"&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"browserslist"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="s2"&gt;"&amp;gt;0.2%"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="s2"&gt;"not dead"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="s2"&gt;"not ie &amp;lt;= 11"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="s2"&gt;"not op_mini all"&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  UI&amp;nbsp;Demo
&lt;/h2&gt;

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

&lt;ul&gt;
&lt;li&gt;TODO App&amp;nbsp;Demo8. Live Sandbox Demo&amp;nbsp;Link&lt;/li&gt;
&lt;li&gt;Live App Link - &lt;a href="https://lyjxd2.csb.app/" rel="noopener noreferrer"&gt;https://lyjxd2.csb.app/&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Code Sandbox Code Editor - &lt;a href="https://codesandbox.io/p/sandbox/lyjxd2" rel="noopener noreferrer"&gt;https://codesandbox.io/p/sandbox/lyjxd2&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;All Sandbox Demos of SimpleCRUD API - &lt;a href="https://simplecrudapi.com/sandbox-demo" rel="noopener noreferrer"&gt;https://simplecrudapi.com/sandbox-demo&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Summary
&lt;/h2&gt;

&lt;p&gt;This Todo app demonstrates the seamless integration of React, custom CSS, and a backend API (SimpleCRUD API). The design is clean, and the functionality covers all essential aspects of a task management application, making it a perfect starter project for React enthusiasts.&lt;/p&gt;

&lt;p&gt;For more information on the SimpleCRUD API, refer to their documentation - &lt;a href="https://simplecrudapi.com/docs/todos" rel="noopener noreferrer"&gt;https://simplecrudapi.com/docs/todos&lt;/a&gt;&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Queue Data Structure Detailed Examples</title>
      <dc:creator>Maniruzzaman Akash</dc:creator>
      <pubDate>Thu, 22 Feb 2024 11:00:03 +0000</pubDate>
      <link>https://dev.to/maniruzzamanakash/queue-data-structure-detailed-examples-jdm</link>
      <guid>https://dev.to/maniruzzamanakash/queue-data-structure-detailed-examples-jdm</guid>
      <description>&lt;h2&gt;
  
  
  Queue Data Structure
&lt;/h2&gt;

&lt;p&gt;A queue is a fundamental data structure in computer science that follows the First-In-First-Out (FIFO) principle. The element that enters the queue first is the first to be removed and the element enters last is the last to be removed.&lt;/p&gt;

&lt;h2&gt;
  
  
  Operations in Queue
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://devsenv.com/tutorials/queue#content-operations-in-queue"&gt;Enqueue Operation&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://devsenv.com/tutorials/queue#content-operations-in-queue"&gt;Dequeue Operation&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://devsenv.com/tutorials/queue#content-operations-in-queue"&gt;Peek (or Front) Operation&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://devsenv.com/tutorials/queue#content-5-search-operation"&gt;Size Operation&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://devsenv.com/tutorials/queue#content-5-search-operation"&gt;Search Operation&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Practical Queue Example in C Programming
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight c"&gt;&lt;code&gt;&lt;span class="cp"&gt;#include&lt;/span&gt; &lt;span class="cpf"&gt;&amp;lt;stdio.h&amp;gt;&lt;/span&gt;&lt;span class="cp"&gt;
&lt;/span&gt;
&lt;span class="cp"&gt;#define MAX_SIZE 100
&lt;/span&gt;
&lt;span class="k"&gt;struct&lt;/span&gt; &lt;span class="n"&gt;Queue&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;arr&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;MAX_SIZE&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;front&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;rear&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;};&lt;/span&gt;

&lt;span class="c1"&gt;// Function to initialize the queue&lt;/span&gt;
&lt;span class="kt"&gt;void&lt;/span&gt; &lt;span class="nf"&gt;initQueue&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;struct&lt;/span&gt; &lt;span class="n"&gt;Queue&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;q&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="n"&gt;q&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;front&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;q&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;rear&lt;/span&gt; &lt;span class="o"&gt;=&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="p"&gt;}&lt;/span&gt;

&lt;span class="c1"&gt;// Enqueue Operation&lt;/span&gt;
&lt;span class="kt"&gt;void&lt;/span&gt; &lt;span class="nf"&gt;enqueue&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;struct&lt;/span&gt; &lt;span class="n"&gt;Queue&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;q&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;item&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;q&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;rear&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="n"&gt;MAX_SIZE&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="p"&gt;{&lt;/span&gt;
        &lt;span class="n"&gt;printf&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"Queue Overflow: Cannot enqueue more elements.&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="s"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;

    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;q&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;front&lt;/span&gt; &lt;span class="o"&gt;==&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="p"&gt;{&lt;/span&gt;
        &lt;span class="n"&gt;q&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;front&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;q&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;rear&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;else&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="n"&gt;q&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;rear&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;q&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;arr&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;q&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;rear&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;item&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="n"&gt;printf&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"%d enqueued to the queue.&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="s"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;item&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="c1"&gt;// Dequeue Operation&lt;/span&gt;
&lt;span class="kt"&gt;void&lt;/span&gt; &lt;span class="nf"&gt;dequeue&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;struct&lt;/span&gt; &lt;span class="n"&gt;Queue&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;q&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;q&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;front&lt;/span&gt; &lt;span class="o"&gt;==&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="p"&gt;{&lt;/span&gt;
        &lt;span class="n"&gt;printf&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"Queue Underflow: Cannot dequeue from an empty queue.&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="s"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
        &lt;span class="k"&gt;return&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;dequeuedItem&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;q&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;arr&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;q&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;front&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;

    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;q&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;front&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="n"&gt;q&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;rear&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="n"&gt;q&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;front&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;q&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;rear&lt;/span&gt; &lt;span class="o"&gt;=&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="c1"&gt;// Reset the queue when the last element is dequeued&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;else&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="n"&gt;q&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;front&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;printf&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"%d dequeued from the queue.&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="s"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;dequeuedItem&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="c1"&gt;// Peek (or Front) Operation&lt;/span&gt;
&lt;span class="kt"&gt;void&lt;/span&gt; &lt;span class="nf"&gt;peek&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;struct&lt;/span&gt; &lt;span class="n"&gt;Queue&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;q&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;q&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;front&lt;/span&gt; &lt;span class="o"&gt;==&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="p"&gt;{&lt;/span&gt;
        &lt;span class="n"&gt;printf&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"Queue is empty.&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="s"&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;else&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="n"&gt;printf&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"Front element: %d&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="s"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;q&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;arr&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;q&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;front&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="c1"&gt;// Size Operation&lt;/span&gt;
&lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="nf"&gt;size&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;struct&lt;/span&gt; &lt;span class="n"&gt;Queue&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;q&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;q&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;front&lt;/span&gt; &lt;span class="o"&gt;==&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="p"&gt;{&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;q&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;rear&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="n"&gt;q&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;front&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="p"&gt;}&lt;/span&gt;

&lt;span class="c1"&gt;// Search Operation&lt;/span&gt;
&lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="nf"&gt;search&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;struct&lt;/span&gt; &lt;span class="n"&gt;Queue&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;q&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;item&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&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;q&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;front&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;&amp;lt;=&lt;/span&gt; &lt;span class="n"&gt;q&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;rear&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="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;q&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;arr&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;]&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="n"&gt;item&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="n"&gt;printf&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"%d found in the queue.&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="s"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;item&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
            &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="mi"&gt;1&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="n"&gt;printf&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"%d not found in the queue.&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="s"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;item&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="c1"&gt;// Check if the queue is empty&lt;/span&gt;
&lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="nf"&gt;isEmpty&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;struct&lt;/span&gt; &lt;span class="n"&gt;Queue&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;q&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;q&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;front&lt;/span&gt; &lt;span class="o"&gt;==&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="p"&gt;}&lt;/span&gt;

&lt;span class="kt"&gt;int&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="k"&gt;struct&lt;/span&gt; &lt;span class="n"&gt;Queue&lt;/span&gt; &lt;span class="n"&gt;myQueue&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="n"&gt;initQueue&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;myQueue&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

    &lt;span class="n"&gt;enqueue&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;myQueue&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="n"&gt;enqueue&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;myQueue&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;20&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="n"&gt;enqueue&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;myQueue&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;30&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

    &lt;span class="n"&gt;peek&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;myQueue&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

    &lt;span class="n"&gt;dequeue&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;myQueue&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="n"&gt;peek&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;myQueue&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

    &lt;span class="n"&gt;printf&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"Queue Size: %d&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="s"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;size&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;myQueue&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;

    &lt;span class="n"&gt;search&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;myQueue&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;20&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="n"&gt;search&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;myQueue&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;40&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="mi"&gt;0&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;Get Queue examples with practical detail in depth knowledge - &lt;a href="https://devsenv.com/tutorials/queue"&gt;https://devsenv.com/tutorials/queue&lt;/a&gt;&lt;/p&gt;

</description>
      <category>queue</category>
      <category>algorithms</category>
      <category>datastructures</category>
      <category>programming</category>
    </item>
    <item>
      <title>Getting More About Linked List Data Structure</title>
      <dc:creator>Maniruzzaman Akash</dc:creator>
      <pubDate>Thu, 22 Feb 2024 10:54:06 +0000</pubDate>
      <link>https://dev.to/maniruzzamanakash/getting-more-about-linked-list-data-structure-202m</link>
      <guid>https://dev.to/maniruzzamanakash/getting-more-about-linked-list-data-structure-202m</guid>
      <description>&lt;h2&gt;
  
  
  Why Linked list
&lt;/h2&gt;

&lt;p&gt;When a program needs to smoothly handle dynamic operations like adding, updating, and removing data-linked lists with a good solution at that time. It provides a flexible way to manage information, making it easier to insert, update, or delete data elements in our program.&lt;/p&gt;

&lt;h2&gt;
  
  
  Structure of a Linked list
&lt;/h2&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%2Fxgu7uaf9at2r2b9c9d4j.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%2Fxgu7uaf9at2r2b9c9d4j.png" alt="Image description" width="800" height="233"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Components of Linked List
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight c"&gt;&lt;code&gt;&lt;span class="k"&gt;struct&lt;/span&gt; &lt;span class="n"&gt;Node&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;data&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="k"&gt;struct&lt;/span&gt; &lt;span class="n"&gt;Node&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;next&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;h2&gt;
  
  
  Insert in Linked List
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight c"&gt;&lt;code&gt;&lt;span class="c1"&gt;// Create a new node&lt;/span&gt;
&lt;span class="k"&gt;struct&lt;/span&gt; &lt;span class="n"&gt;Node&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;newNode&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;malloc&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;sizeof&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;struct&lt;/span&gt; &lt;span class="n"&gt;Node&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;
&lt;span class="n"&gt;newNode&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;data&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;newData&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="c1"&gt;// Update pointers&lt;/span&gt;
&lt;span class="n"&gt;newNode&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;next&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;head&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="n"&gt;head&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;newNode&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Insert in the middle
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight c"&gt;&lt;code&gt;&lt;span class="c1"&gt;// Create a new node&lt;/span&gt;
&lt;span class="k"&gt;struct&lt;/span&gt; &lt;span class="n"&gt;Node&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;newNode&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;malloc&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;sizeof&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;struct&lt;/span&gt; &lt;span class="n"&gt;Node&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;
&lt;span class="n"&gt;newNode&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;data&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;newData&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="c1"&gt;// Update pointers&lt;/span&gt;
&lt;span class="n"&gt;newNode&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;next&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;temp&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;next&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="n"&gt;temp&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;next&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;newNode&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Insert in the end
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight c"&gt;&lt;code&gt;&lt;span class="k"&gt;struct&lt;/span&gt; &lt;span class="n"&gt;Node&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;newNode&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;malloc&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;sizeof&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;struct&lt;/span&gt; &lt;span class="n"&gt;Node&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;
&lt;span class="n"&gt;newNode&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;data&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;newData&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="n"&gt;newNode&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;next&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;NULL&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="c1"&gt;// Update pointers&lt;/span&gt;
&lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;head&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="nb"&gt;NULL&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="n"&gt;head&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;newNode&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;else&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;struct&lt;/span&gt; &lt;span class="n"&gt;Node&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;temp&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;head&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="k"&gt;while&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;temp&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;next&lt;/span&gt; &lt;span class="o"&gt;!=&lt;/span&gt; &lt;span class="nb"&gt;NULL&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="n"&gt;temp&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;temp&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;next&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="n"&gt;temp&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;next&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;newNode&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;h2&gt;
  
  
  Linked List Traverse
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight c"&gt;&lt;code&gt;&lt;span class="k"&gt;struct&lt;/span&gt; &lt;span class="n"&gt;Node&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;current&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;head&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;while&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;current&lt;/span&gt; &lt;span class="o"&gt;!=&lt;/span&gt; &lt;span class="nb"&gt;NULL&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="c1"&gt;// Access data at the current node&lt;/span&gt;
        &lt;span class="n"&gt;printf&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"%d -&amp;gt; "&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;current&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;data&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
        &lt;span class="c1"&gt;// Move to the next node&lt;/span&gt;
        &lt;span class="n"&gt;current&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;current&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;next&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;h2&gt;
  
  
  Real life example of Linked list
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight c"&gt;&lt;code&gt;&lt;span class="cp"&gt;#include&lt;/span&gt; &lt;span class="cpf"&gt;&amp;lt;stdio.h&amp;gt;&lt;/span&gt;&lt;span class="cp"&gt;
#include&lt;/span&gt; &lt;span class="cpf"&gt;&amp;lt;stdlib.h&amp;gt;&lt;/span&gt;&lt;span class="cp"&gt;
#include&lt;/span&gt; &lt;span class="cpf"&gt;&amp;lt;string.h&amp;gt;&lt;/span&gt;&lt;span class="cp"&gt;
&lt;/span&gt;
&lt;span class="c1"&gt;// Node structure for the linked list&lt;/span&gt;
&lt;span class="k"&gt;struct&lt;/span&gt; &lt;span class="n"&gt;Task&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;taskID&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="kt"&gt;char&lt;/span&gt; &lt;span class="n"&gt;description&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;100&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;
    &lt;span class="k"&gt;struct&lt;/span&gt; &lt;span class="n"&gt;Task&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;next&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;};&lt;/span&gt;

&lt;span class="c1"&gt;// Function to add a new task to the to-do list&lt;/span&gt;
&lt;span class="k"&gt;struct&lt;/span&gt; &lt;span class="n"&gt;Task&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="nf"&gt;insertTask&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;struct&lt;/span&gt; &lt;span class="n"&gt;Task&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;head&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;id&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="k"&gt;const&lt;/span&gt; &lt;span class="kt"&gt;char&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;desc&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="c1"&gt;// Allocate memory for the new task&lt;/span&gt;
    &lt;span class="k"&gt;struct&lt;/span&gt; &lt;span class="n"&gt;Task&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;newTask&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;struct&lt;/span&gt; &lt;span class="n"&gt;Task&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="n"&gt;malloc&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;sizeof&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;struct&lt;/span&gt; &lt;span class="n"&gt;Task&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;

    &lt;span class="c1"&gt;// Set the task details&lt;/span&gt;
    &lt;span class="n"&gt;newTask&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;taskID&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;id&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="n"&gt;strncpy&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;newTask&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;description&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;desc&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="k"&gt;sizeof&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;newTask&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;description&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;
    &lt;span class="n"&gt;newTask&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;next&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;NULL&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

    &lt;span class="c1"&gt;// If the list is empty, make the new task the head&lt;/span&gt;
    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;head&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="nb"&gt;NULL&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="n"&gt;head&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;newTask&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;else&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="c1"&gt;// Otherwise, add the new task to the end of the list&lt;/span&gt;
        &lt;span class="k"&gt;struct&lt;/span&gt; &lt;span class="n"&gt;Task&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;current&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;head&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
        &lt;span class="k"&gt;while&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;current&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;next&lt;/span&gt; &lt;span class="o"&gt;!=&lt;/span&gt; &lt;span class="nb"&gt;NULL&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="n"&gt;current&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;current&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;next&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
        &lt;span class="p"&gt;}&lt;/span&gt;
        &lt;span class="n"&gt;current&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;next&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;newTask&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;

    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;head&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="c1"&gt;// Function to traverse and display the to-do list&lt;/span&gt;
&lt;span class="kt"&gt;void&lt;/span&gt; &lt;span class="nf"&gt;traverseToDoList&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;struct&lt;/span&gt; &lt;span class="n"&gt;Task&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;head&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;head&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="nb"&gt;NULL&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="n"&gt;printf&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"To-Do List is empty.&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="s"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;

    &lt;span class="c1"&gt;// Initialize a pointer to the head of the list&lt;/span&gt;
    &lt;span class="k"&gt;struct&lt;/span&gt; &lt;span class="n"&gt;Task&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;current&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;head&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

    &lt;span class="c1"&gt;// Iterate through the tasks&lt;/span&gt;
    &lt;span class="k"&gt;while&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;current&lt;/span&gt; &lt;span class="o"&gt;!=&lt;/span&gt; &lt;span class="nb"&gt;NULL&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="c1"&gt;// Display task details&lt;/span&gt;
        &lt;span class="n"&gt;printf&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"Task %d: %s&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="s"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;current&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;taskID&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;current&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;description&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

        &lt;span class="c1"&gt;// Move to the next task&lt;/span&gt;
        &lt;span class="n"&gt;current&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;current&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;next&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="c1"&gt;// Function to remove a task from the to-do list&lt;/span&gt;
&lt;span class="k"&gt;struct&lt;/span&gt; &lt;span class="n"&gt;Task&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="nf"&gt;deleteTask&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;struct&lt;/span&gt; &lt;span class="n"&gt;Task&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;head&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;id&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="c1"&gt;// If the list is empty, nothing to delete&lt;/span&gt;
    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;head&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="nb"&gt;NULL&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="n"&gt;printf&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"To-Do List is empty. Cannot delete.&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="s"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;head&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;

    &lt;span class="c1"&gt;// If the task to be deleted is the head&lt;/span&gt;
    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;head&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;taskID&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="n"&gt;id&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="k"&gt;struct&lt;/span&gt; &lt;span class="n"&gt;Task&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;newHead&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;head&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;next&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
        &lt;span class="n"&gt;free&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;head&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;newHead&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;

    &lt;span class="c1"&gt;// Search for the task to be deleted&lt;/span&gt;
    &lt;span class="k"&gt;struct&lt;/span&gt; &lt;span class="n"&gt;Task&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;current&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;head&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="k"&gt;struct&lt;/span&gt; &lt;span class="n"&gt;Task&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;previous&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;NULL&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

    &lt;span class="k"&gt;while&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;current&lt;/span&gt; &lt;span class="o"&gt;!=&lt;/span&gt; &lt;span class="nb"&gt;NULL&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="n"&gt;current&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;taskID&lt;/span&gt; &lt;span class="o"&gt;!=&lt;/span&gt; &lt;span class="n"&gt;id&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="n"&gt;previous&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;current&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
        &lt;span class="n"&gt;current&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;current&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;next&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;

    &lt;span class="c1"&gt;// If the task is not found&lt;/span&gt;
    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;current&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="nb"&gt;NULL&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="n"&gt;printf&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"Task %d not found. Cannot delete.&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="s"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;id&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;head&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;

    &lt;span class="c1"&gt;// Remove the task from the list&lt;/span&gt;
    &lt;span class="n"&gt;previous&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;next&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;current&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;next&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="n"&gt;free&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;current&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;head&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="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="c1"&gt;// Initialize an empty to-do list&lt;/span&gt;
    &lt;span class="k"&gt;struct&lt;/span&gt; &lt;span class="n"&gt;Task&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;toDoList&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;NULL&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

    &lt;span class="c1"&gt;// Insert tasks&lt;/span&gt;
    &lt;span class="n"&gt;toDoList&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;insertTask&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;toDoList&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;"Complete assignment"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="n"&gt;toDoList&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;insertTask&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;toDoList&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;"Buy groceries"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="n"&gt;toDoList&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;insertTask&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;toDoList&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;"Attend meeting"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

    &lt;span class="c1"&gt;// Display the to-do list&lt;/span&gt;
    &lt;span class="n"&gt;printf&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"Initial To-Do List:&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="s"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="n"&gt;traverseToDoList&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;toDoList&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

    &lt;span class="c1"&gt;// Delete a task&lt;/span&gt;
    &lt;span class="n"&gt;toDoList&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;deleteTask&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;toDoList&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

    &lt;span class="c1"&gt;// Display the updated to-do list&lt;/span&gt;
    &lt;span class="n"&gt;printf&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="s"&gt;Updated To-Do List after deletion:&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="s"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="n"&gt;traverseToDoList&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;toDoList&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="mi"&gt;0&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;This is just the beginning of the Linked list.&lt;/p&gt;

&lt;p&gt;If you need more examples and detailed learning, deleting, and many more Please go through this article with many practical examples and learning - &lt;a href="https://devsenv.com/tutorials/linked-list"&gt;https://devsenv.com/tutorials/linked-list&lt;/a&gt; &lt;/p&gt;

</description>
      <category>datastructures</category>
      <category>linked</category>
      <category>dsa</category>
      <category>algorithms</category>
    </item>
  </channel>
</rss>
