<?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: Anthony Wright</title>
    <description>The latest articles on DEV Community by Anthony Wright (@mrwrite).</description>
    <link>https://dev.to/mrwrite</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%2F1054217%2F6c30d452-5437-4c35-9f82-f425adfb92d6.jpg</url>
      <title>DEV Community: Anthony Wright</title>
      <link>https://dev.to/mrwrite</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/mrwrite"/>
    <language>en</language>
    <item>
      <title>Building Role-Based Student, Teacher, and Admin Experiences in EchoEd</title>
      <dc:creator>Anthony Wright</dc:creator>
      <pubDate>Mon, 13 Jul 2026 13:02:28 +0000</pubDate>
      <link>https://dev.to/mrwrite/building-role-based-student-teacher-and-admin-experiences-in-echoed-27f3</link>
      <guid>https://dev.to/mrwrite/building-role-based-student-teacher-and-admin-experiences-in-echoed-27f3</guid>
      <description>&lt;p&gt;A role-based product should involve more than hiding navigation links.&lt;/p&gt;

&lt;p&gt;Students, teachers, and platform administrators have different goals, data needs, privacy constraints, and consequences attached to their actions. EchoEd’s recent UI/UX work separates these roles into three&lt;br&gt;
  canonical product areas:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;/learn for students&lt;/li&gt;
&lt;li&gt;/teach for teachers&lt;/li&gt;
&lt;li&gt;/admin for platform administrators&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The attached demo videos show each experience in its current form.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Student Learn&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;  &lt;iframe src="https://www.youtube.com/embed/cch47qSHPHY"&gt;
  &lt;/iframe&gt;
&lt;/p&gt;

&lt;p&gt;The Student experience prioritizes continuation over navigation complexity.&lt;/p&gt;

&lt;p&gt;The /learn home composes existing course, progress, badge, certificate, and learner-product APIs to show:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The next governed learning action&lt;/li&gt;
&lt;li&gt;Current courses and progress&lt;/li&gt;
&lt;li&gt;Available learning&lt;/li&gt;
&lt;li&gt;Progress summaries&lt;/li&gt;
&lt;li&gt;Badges and certificates&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Course overviews use a reusable curriculum component for units and lessons. Lesson entry still goes through the existing start-course and progress APIs, so the UI cannot bypass backend sequencing rules.&lt;/p&gt;

&lt;p&gt;Final assessment submissions use a shared confirmation dialog. Lesson completion exposes saving and failure states rather than optimistically assuming persistence.&lt;/p&gt;

&lt;p&gt;No backend contracts were changed for the Student phase.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Teacher Teach&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;  &lt;iframe src="https://www.youtube.com/embed/t3wBziH96N4"&gt;
  &lt;/iframe&gt;
&lt;/p&gt;

&lt;p&gt;The Teacher experience introduces a canonical route family:&lt;/p&gt;

&lt;p&gt;/teach&lt;br&gt;
  /teach/classes&lt;br&gt;
  /teach/classes/:id&lt;br&gt;
  /teach/curriculum&lt;br&gt;
  /teach/courses/:courseId/preview&lt;br&gt;
  /teach/assignments&lt;br&gt;
  /teach/learners/:learnerId&lt;/p&gt;

&lt;p&gt;The Teacher home focuses on classes, learner progress, and curriculum. Class detail composes existing section APIs into overview, roster, assignment, progress, and discussion views.&lt;/p&gt;

&lt;p&gt;Learner detail is scoped through class-roster context. Assignment creation uses confirmation and preserves form values after API failures.&lt;/p&gt;

&lt;p&gt;The UI does not expose persistent feedback, manual review, or destructive discussion moderation because those workflows do not yet have sufficiently scoped backend contracts.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Platform Admin&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;  &lt;iframe src="https://www.youtube.com/embed/Gj_T4a8uiiw"&gt;
  &lt;/iframe&gt;
&lt;/p&gt;

&lt;p&gt;The Admin experience uses canonical routes for overview, users, organizations, courses, badges, and reports.&lt;/p&gt;

&lt;p&gt;Important implementation decisions include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;User lists omit unnecessary fields.&lt;/li&gt;
&lt;li&gt;Role mutations wait for API confirmation before updating the UI.&lt;/li&gt;
&lt;li&gt;Self-role changes and self-deletion are blocked in the interface.&lt;/li&gt;
&lt;li&gt;Destructive actions use exact consequence language.&lt;/li&gt;
&lt;li&gt;Organization visibility remains constrained by current membership-scoped APIs.&lt;/li&gt;
&lt;li&gt;Course oversight does not grant Content Studio authoring.&lt;/li&gt;
&lt;li&gt;Super Admin capabilities are based on verified authorization, not role-name assumptions.&lt;/li&gt;
&lt;li&gt;Unsupported moderation and lifecycle controls remain absent.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;During seeded browser testing, the user-detail flow exposed a backend issue: FastAPI accepted the user ID as a string while SQLAlchemy compared it with a UUID column.&lt;/p&gt;

&lt;p&gt;The repair typed detail and update parameters as uuid.UUID. We also moved the static /api/users/students route before /api/users/{user_id} so the dynamic route could not shadow it.&lt;/p&gt;

&lt;p&gt;Regression tests now cover both behaviors.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Shared UX and Accessibility&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;All three areas reuse the same production foundations:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Semantic design tokens&lt;/li&gt;
&lt;li&gt;Role-aware shell navigation&lt;/li&gt;
&lt;li&gt;Route guards&lt;/li&gt;
&lt;li&gt;Shared loading and state components&lt;/li&gt;
&lt;li&gt;Confirmation dialogs with focus trapping and restoration&lt;/li&gt;
&lt;li&gt;Keyboard-operable controls&lt;/li&gt;
&lt;li&gt;Visible focus indicators&lt;/li&gt;
&lt;li&gt;Reduced-motion behavior&lt;/li&gt;
&lt;li&gt;Semantic desktop tables&lt;/li&gt;
&lt;li&gt;Stacked mobile record layouts&lt;/li&gt;
&lt;li&gt;Legacy deep-link compatibility&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The frontend improves presentation and workflow clarity, but backend authorization remains authoritative.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Current Verification&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Frontend unit tests: 245 passing&lt;br&gt;
  Backend tests: 224 passing&lt;br&gt;
  Seeded Playwright scenarios: 3 passing&lt;br&gt;
  Production build: passing&lt;br&gt;
  Strict OpenSpec validation: passing&lt;/p&gt;

&lt;p&gt;The Playwright suite currently covers the seeded Student workflow, the Platform Admin workflow, and rejection of an unauthorized Student deep link into Admin.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Known Gaps&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Several workflows need stronger backend contracts before the UI can safely support them:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Persistent teacher feedback&lt;/li&gt;
&lt;li&gt;Scoped teacher review&lt;/li&gt;
&lt;li&gt;Authenticated discussion moderation&lt;/li&gt;
&lt;li&gt;Platform-wide organization oversight&lt;/li&gt;
&lt;li&gt;Account suspension and restoration&lt;/li&gt;
&lt;li&gt;Administrative audit events&lt;/li&gt;
&lt;li&gt;Badge lifecycle management&lt;/li&gt;
&lt;li&gt;Explicit Super Admin permission inheritance&lt;/li&gt;
&lt;li&gt;Privacy-minimized Admin user response schemas&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;These are documented gaps, not frontend placeholders.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Community Review&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;I would value feedback from people working across education and software:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Do the boundaries between Learn, Teach, and Admin match real responsibilities?&lt;/li&gt;
&lt;li&gt;Which Teacher information should be visible at class level versus learner level?&lt;/li&gt;
&lt;li&gt;What information should a platform administrator never see in a broad user list?&lt;/li&gt;
&lt;li&gt;Which workflows should receive deeper screen-reader and keyboard testing?&lt;/li&gt;
&lt;li&gt;Which backend gap would you prioritize before expanding the next UI phase?&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The Student, Teacher, and Platform Admin production phases are complete for EchoEd’s currently supported APIs.&lt;/p&gt;

&lt;p&gt;The full UI/UX overhaul is still underway. Content Studio, organization-admin self-service, Community, parent, and viewer experiences remain outside these completed phases.&lt;/p&gt;

</description>
      <category>angular</category>
      <category>fastapi</category>
      <category>webde</category>
      <category>community</category>
    </item>
    <item>
      <title>Building Open-Source Education Infrastructure for African History and the African Diaspora</title>
      <dc:creator>Anthony Wright</dc:creator>
      <pubDate>Fri, 10 Jul 2026 14:25:10 +0000</pubDate>
      <link>https://dev.to/mrwrite/building-open-source-education-infrastructure-for-african-history-and-the-african-diaspora-33i1</link>
      <guid>https://dev.to/mrwrite/building-open-source-education-infrastructure-for-african-history-and-the-african-diaspora-33i1</guid>
      <description>&lt;p&gt;When people hear "education platform," they usually think about another Learning Management System.&lt;/p&gt;

&lt;p&gt;EchoEd isn't trying to become another LMS.&lt;/p&gt;

&lt;p&gt;It's an attempt to build &lt;strong&gt;open-source educational infrastructure&lt;/strong&gt; centered on teaching African history and the histories of the African diaspora—built transparently, collaboratively, and alongside the communities it hopes to serve.&lt;/p&gt;

&lt;p&gt;Today, I'm opening EchoEd for early community review, and I wanted to share why I'm building it, what exists today, and where I'd love help from educators and developers.&lt;/p&gt;




&lt;h2&gt;
  
  
  Why EchoEd Exists
&lt;/h2&gt;

&lt;p&gt;History shapes identity.&lt;/p&gt;

&lt;p&gt;It influences how we see ourselves, how we understand the world, and how future generations understand the people who came before them.&lt;/p&gt;

&lt;p&gt;While there are many excellent educators and historians doing incredible work, access to high-quality, culturally grounded educational resources is still uneven. Many schools, homeschool families, and community organizations are looking for engaging, trustworthy ways to teach African history and the histories of the African diaspora.&lt;/p&gt;

&lt;p&gt;I believe open source can help.&lt;/p&gt;

&lt;p&gt;Open-source software has transformed how we build technology. It enables collaboration across organizations, countries, and backgrounds. It allows communities to improve systems together instead of relying on a single vendor or institution.&lt;/p&gt;

&lt;p&gt;I believe educational infrastructure deserves the same approach.&lt;/p&gt;

&lt;p&gt;Instead of building behind closed doors and asking educators to adapt later, I want EchoEd to be shaped by educators, historians, developers, accessibility advocates, and community organizations from the beginning.&lt;/p&gt;

&lt;p&gt;Because trust should come before scale.&lt;/p&gt;




&lt;h2&gt;
  
  
  What Exists Today
&lt;/h2&gt;

&lt;p&gt;EchoEd is still early, but it's no longer just an idea.&lt;/p&gt;

&lt;p&gt;Today the project includes a working K–5 demonstration with:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Student learning experiences&lt;/li&gt;
&lt;li&gt;Teacher workflows&lt;/li&gt;
&lt;li&gt;Administrative experiences&lt;/li&gt;
&lt;li&gt;Public documentation&lt;/li&gt;
&lt;li&gt;Contributor onboarding documentation&lt;/li&gt;
&lt;li&gt;Open-source contribution guidance&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The goal wasn't to build every feature before inviting people in.&lt;/p&gt;

&lt;p&gt;The goal was to build enough that meaningful conversations could begin.&lt;/p&gt;




&lt;h2&gt;
  
  
  What Phase 1 Prepared
&lt;/h2&gt;

&lt;p&gt;Before inviting contributors, I wanted to make sure the project felt welcoming and transparent.&lt;/p&gt;

&lt;p&gt;Phase 1 focused on preparing EchoEd for open-source collaboration rather than adding new product features.&lt;/p&gt;

&lt;p&gt;That work included:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A significantly improved README&lt;/li&gt;
&lt;li&gt;Contributor documentation&lt;/li&gt;
&lt;li&gt;A Code of Conduct&lt;/li&gt;
&lt;li&gt;Architecture documentation&lt;/li&gt;
&lt;li&gt;Security guidance&lt;/li&gt;
&lt;li&gt;Public demo documentation&lt;/li&gt;
&lt;li&gt;Community trust documentation&lt;/li&gt;
&lt;li&gt;Outreach readiness guidance&lt;/li&gt;
&lt;li&gt;GitHub issue templates&lt;/li&gt;
&lt;li&gt;Pull request templates&lt;/li&gt;
&lt;li&gt;A public roadmap&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;These aren't the most exciting features to build.&lt;/p&gt;

&lt;p&gt;But they're some of the most important if you want people to feel confident contributing to a project.&lt;/p&gt;

&lt;p&gt;Good open-source communities don't happen by accident. They require intentional documentation, clear expectations, and respectful collaboration.&lt;/p&gt;




&lt;h2&gt;
  
  
  What Phase 2 Needs
&lt;/h2&gt;

&lt;p&gt;Now the focus shifts from preparation to learning.&lt;/p&gt;

&lt;p&gt;EchoEd doesn't need hundreds of contributors tomorrow.&lt;/p&gt;

&lt;p&gt;It needs thoughtful feedback from people with different expertise.&lt;/p&gt;

&lt;p&gt;Right now, the project would benefit most from:&lt;/p&gt;

&lt;h3&gt;
  
  
  Educator feedback
&lt;/h3&gt;

&lt;p&gt;I'd love educators to walk through a learning experience and answer questions like:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Does this feel intuitive?&lt;/li&gt;
&lt;li&gt;Would students understand the flow?&lt;/li&gt;
&lt;li&gt;What's missing?&lt;/li&gt;
&lt;li&gt;What classroom realities aren't being considered?&lt;/li&gt;
&lt;/ul&gt;




&lt;h3&gt;
  
  
  Developer contributors
&lt;/h3&gt;

&lt;p&gt;There are opportunities across the stack, including:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Documentation improvements&lt;/li&gt;
&lt;li&gt;Frontend development&lt;/li&gt;
&lt;li&gt;Backend enhancements&lt;/li&gt;
&lt;li&gt;Testing&lt;/li&gt;
&lt;li&gt;Demo reliability&lt;/li&gt;
&lt;li&gt;Accessibility improvements&lt;/li&gt;
&lt;li&gt;Developer experience&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Whether you've contributed to open source for years or you're looking for your first contribution, there's room to help.&lt;/p&gt;




&lt;h3&gt;
  
  
  Accessibility review
&lt;/h3&gt;

&lt;p&gt;Educational software should be usable by everyone.&lt;/p&gt;

&lt;p&gt;Improving keyboard navigation, screen reader support, semantic HTML, color contrast, and overall usability is an area where community expertise can make a real difference.&lt;/p&gt;




&lt;h3&gt;
  
  
  Historical review
&lt;/h3&gt;

&lt;p&gt;Perhaps the most important area of all.&lt;/p&gt;

&lt;p&gt;I'm looking for historians, educators, and community members who can help strengthen:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;historical framing&lt;/li&gt;
&lt;li&gt;source quality&lt;/li&gt;
&lt;li&gt;representation&lt;/li&gt;
&lt;li&gt;accuracy&lt;/li&gt;
&lt;li&gt;balance of perspectives&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Technology can accelerate learning.&lt;/p&gt;

&lt;p&gt;But it should never replace careful historical scholarship.&lt;/p&gt;




&lt;h2&gt;
  
  
  How Developers Can Help
&lt;/h2&gt;

&lt;p&gt;Not every contribution requires writing thousands of lines of code.&lt;/p&gt;

&lt;p&gt;You could help by:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Improving documentation&lt;/li&gt;
&lt;li&gt;Fixing UI issues&lt;/li&gt;
&lt;li&gt;Building frontend features&lt;/li&gt;
&lt;li&gt;Improving backend services&lt;/li&gt;
&lt;li&gt;Writing tests&lt;/li&gt;
&lt;li&gt;Improving demo reliability&lt;/li&gt;
&lt;li&gt;Reviewing accessibility&lt;/li&gt;
&lt;li&gt;Improving developer onboarding&lt;/li&gt;
&lt;li&gt;Refining the architecture&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Some of the highest-impact contributions to open source aren't glamorous—they simply make it easier for the next person to contribute.&lt;/p&gt;




&lt;h2&gt;
  
  
  How Educators Can Help
&lt;/h2&gt;

&lt;p&gt;If you're an educator, I'm &lt;strong&gt;not&lt;/strong&gt; asking you to volunteer countless hours.&lt;/p&gt;

&lt;p&gt;Even reviewing one lesson or one learner journey can provide insights that fundamentally improve the project.&lt;/p&gt;

&lt;p&gt;Helpful feedback might include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Classroom usability&lt;/li&gt;
&lt;li&gt;Age appropriateness&lt;/li&gt;
&lt;li&gt;Instructional flow&lt;/li&gt;
&lt;li&gt;Historical framing&lt;/li&gt;
&lt;li&gt;Source recommendations&lt;/li&gt;
&lt;li&gt;Topics that deserve greater attention&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Your expertise is valuable, and I want EchoEd to reflect that by listening first.&lt;/p&gt;




&lt;h2&gt;
  
  
  Looking Ahead
&lt;/h2&gt;

&lt;p&gt;This project has no marketing budget.&lt;/p&gt;

&lt;p&gt;There isn't a large team behind it.&lt;/p&gt;

&lt;p&gt;Right now, EchoEd is growing through conversations, thoughtful feedback, and people who believe education can be built more openly.&lt;/p&gt;

&lt;p&gt;My hope is that over time, EchoEd becomes more than a software project.&lt;/p&gt;

&lt;p&gt;I hope it becomes a community of educators, historians, developers, students, and organizations working together to expand access to meaningful, evidence-based learning about African history and the histories of the African diaspora.&lt;/p&gt;




&lt;h2&gt;
  
  
  If You're Interested
&lt;/h2&gt;

&lt;p&gt;If any part of this resonates with you, I'd love for you to get involved in whatever way feels appropriate.&lt;/p&gt;

&lt;p&gt;You can:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Explore the demo&lt;/li&gt;
&lt;li&gt;Read through the documentation&lt;/li&gt;
&lt;li&gt;Open a GitHub issue&lt;/li&gt;
&lt;li&gt;Suggest improvements&lt;/li&gt;
&lt;li&gt;Contribute code&lt;/li&gt;
&lt;li&gt;Review historical framing&lt;/li&gt;
&lt;li&gt;Share the project with someone who might have helpful expertise&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Every thoughtful conversation makes the project stronger.&lt;/p&gt;

&lt;p&gt;Because building educational technology isn't just about writing software.&lt;/p&gt;

&lt;p&gt;It's about building trust.&lt;/p&gt;

&lt;p&gt;And I believe the best way to build trust is to build together.&lt;/p&gt;

</description>
      <category>opensource</category>
      <category>edtech</category>
      <category>python</category>
      <category>webdev</category>
    </item>
  </channel>
</rss>
