<?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: Eng-younesAsaad</title>
    <description>The latest articles on DEV Community by Eng-younesAsaad (@engyounesasaad).</description>
    <link>https://dev.to/engyounesasaad</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%2F4200571%2Feee69d3e-5267-423a-8dfe-79d3de2e392c.jpg</url>
      <title>DEV Community: Eng-younesAsaad</title>
      <link>https://dev.to/engyounesasaad</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/engyounesasaad"/>
    <language>en</language>
    <item>
      <title>Building an Arabic Student Project Platform with Replit Agent</title>
      <dc:creator>Eng-younesAsaad</dc:creator>
      <pubDate>Thu, 22 Oct 2026 18:12:44 +0000</pubDate>
      <link>https://dev.to/engyounesasaad/building-an-arabic-student-project-platform-with-replit-agent-434f</link>
      <guid>https://dev.to/engyounesasaad/building-an-arabic-student-project-platform-with-replit-agent-434f</guid>
      <description>&lt;p&gt;For a course assignment, we were asked to build a software project with the help of Replit. As a team of two, we wanted to create something useful—not just a collection of pages, but an application with connected workflows, persistent data, and clear responsibilities.&lt;/p&gt;

&lt;p&gt;We chose to build an Arabic platform for managing student projects.&lt;/p&gt;

&lt;p&gt;The idea was to bring the project lifecycle into one place: publishing assignments, forming teams, organizing tasks, submitting work, and releasing evaluations.&lt;/p&gt;

&lt;p&gt;This article explains what we built, the technologies we used, and how we worked with Replit Agent throughout the process.&lt;/p&gt;

&lt;p&gt;The Problem We Wanted to Solve&lt;br&gt;
A group project involves more than writing code.&lt;/p&gt;

&lt;p&gt;An instructor needs to communicate requirements, set deadlines, follow team progress, review submissions, and publish grades. Students need to understand the assignment, organize their teams, divide responsibilities, and keep track of their work.&lt;/p&gt;

&lt;p&gt;When these details are scattered across messages, documents, and shared links, important information can become difficult to find.&lt;/p&gt;

&lt;p&gt;Our platform organizes these activities around a single course, with two main roles: instructor and student.&lt;/p&gt;

&lt;p&gt;What the Platform Does&lt;br&gt;
The Instructor Workflow&lt;br&gt;
An instructor can create an assignment and define its description, deadline, team-size limits, and grading criteria.&lt;/p&gt;

&lt;p&gt;Assignments begin as drafts. They become visible to students only after publication, allowing the instructor to prepare requirements before sharing them.&lt;/p&gt;

&lt;p&gt;The instructor can then review teams and their submissions, prepare evaluations, and publish results when they are ready.&lt;/p&gt;

&lt;p&gt;Separating “saved” from “published” is an important part of the workflow. Saving an evaluation should not automatically make an unfinished grade visible to students.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Flqikr0atxwpqnblpc5yr.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Flqikr0atxwpqnblpc5yr.png" alt=" " width="800" height="382"&gt;&lt;/a&gt;&lt;br&gt;
The instructor can define assignment requirements, deadlines, team sizes, and grading criteria.&lt;/p&gt;

&lt;p&gt;The Student Workflow&lt;br&gt;
Students can browse published assignments, create a team, or join an existing team using an invitation code, subject to the assignment’s rules.&lt;/p&gt;

&lt;p&gt;Inside a team, members can organize tasks and track their status. Team leaders have additional controls for managing membership and assigning responsibilities.&lt;/p&gt;

&lt;p&gt;For submissions, we chose project links rather than file uploads. The platform keeps submission versions, preserving the history when a team submits an updated version of its work.&lt;/p&gt;

&lt;p&gt;Students can view their evaluation after the instructor publishes it.&lt;/p&gt;

&lt;p&gt;Our Technology Stack&lt;br&gt;
We used TypeScript across the frontend and backend.&lt;/p&gt;

&lt;p&gt;Area    Technology&lt;br&gt;
Frontend    React and Vite&lt;br&gt;
Styling Tailwind CSS&lt;br&gt;
Routing React Router&lt;br&gt;
Server-state management TanStack Query&lt;br&gt;
Backend Node.js and Express&lt;br&gt;
Database    PostgreSQL&lt;br&gt;
Database access Drizzle ORM&lt;br&gt;
Input validation    Zod&lt;br&gt;
Authentication  Replit Auth&lt;br&gt;
Automated testing   Vitest and Supertest&lt;br&gt;
The interface is in Arabic and uses a right-to-left layout.&lt;/p&gt;

&lt;p&gt;TypeScript helps make the relationships between users, assignments, teams, tasks, and evaluations more explicit. However, compile-time types do not validate incoming HTTP requests, so the backend also checks input at runtime.&lt;/p&gt;

&lt;p&gt;How the Application Fits Together&lt;br&gt;
The application follows a frontend–backend–database structure:&lt;/p&gt;

&lt;p&gt;React Interface&lt;br&gt;
      |&lt;br&gt;
      v&lt;br&gt;
Express API&lt;br&gt;
      |&lt;br&gt;
      v&lt;br&gt;
PostgreSQL Database&lt;/p&gt;

&lt;p&gt;The frontend handles navigation, forms, and displaying information. The API validates requests, checks permissions, and applies the course’s rules. PostgreSQL stores the application’s persistent data.&lt;/p&gt;

&lt;p&gt;This separation matters because the interface should not be responsible for enforcing rules that protect other users’ information.&lt;/p&gt;

&lt;p&gt;Authentication: A Decision We Changed&lt;br&gt;
Our original authentication choice was Clerk, but configuring external credentials became a barrier to trying the application.&lt;/p&gt;

&lt;p&gt;We temporarily used an explicit development-only demo mode. Later, we chose Replit Auth, allowing users to sign in with their Replit accounts.&lt;/p&gt;

&lt;p&gt;After enabling real authentication, we disabled the demo mode.&lt;/p&gt;

&lt;p&gt;We also manually tested signing in and out, checking that users reached the correct dashboard and remained signed in after refreshing the page.&lt;/p&gt;

&lt;p&gt;One important distinction became clear: a demo account selector can help demonstrate a workflow, but it is not a replacement for real authentication.&lt;/p&gt;

&lt;p&gt;Permissions Belong on the Server&lt;br&gt;
Hiding a button does not secure the action behind it.&lt;/p&gt;

&lt;p&gt;A student should not be able to access another team’s information by changing a URL or sending a request directly to the API. Similarly, an unpublished evaluation should remain unavailable even if someone guesses its address.&lt;/p&gt;

&lt;p&gt;For this reason, the backend checks the user’s role and, where relevant, team membership and leadership.&lt;/p&gt;

&lt;p&gt;The interface guides users toward permitted actions. The server enforces those permissions.&lt;/p&gt;

&lt;p&gt;Working with Replit Agent&lt;br&gt;
We want to be transparent about how the project was built: Replit Agent wrote the application code based on the requirements and decisions we discussed.&lt;/p&gt;

&lt;p&gt;Our role was to choose the problem, define the expected behavior, discuss alternatives, review the results, and try the application ourselves.&lt;/p&gt;

&lt;p&gt;This still required specific decisions:&lt;/p&gt;

&lt;p&gt;When should students be allowed to join a team?&lt;br&gt;
What happens after an assignment’s deadline?&lt;br&gt;
Who can manage team members?&lt;br&gt;
Should saving an evaluation immediately reveal it?&lt;br&gt;
How should updated submissions be recorded?&lt;br&gt;
These questions shape the application regardless of who writes the code.&lt;/p&gt;

&lt;p&gt;Using an AI coding assistant did not remove the need for clear requirements. It made those requirements especially important, because vague instructions can produce behavior that looks reasonable but does not match the intended rules.&lt;/p&gt;

&lt;p&gt;Testing the Important Boundaries&lt;br&gt;
We combined automated checks with manual testing.&lt;/p&gt;

&lt;p&gt;The automated tests cover areas such as permissions, team rules, sessions, and authentication failures. Authentication tests include cases involving modified login data, expired login flows, and reused authorization codes.&lt;/p&gt;

&lt;p&gt;There is also a successful authentication case, so rejected requests are not mistaken for evidence that security checks work when the entire login flow is actually broken.&lt;/p&gt;

&lt;p&gt;Manual testing complemented these checks by letting us experience the application through the interface.&lt;/p&gt;

&lt;p&gt;Passing tests does not guarantee that an application has no bugs. It does provide repeatable checks for specific behaviors that matter.&lt;/p&gt;

&lt;p&gt;Keeping the Scope Manageable&lt;br&gt;
We deliberately focused the current version on one course and its project workflow.&lt;/p&gt;

&lt;p&gt;We did not include chat, file uploads, or AI features inside the product. Replit Agent was a development tool, not a feature of the platform itself.&lt;/p&gt;

&lt;p&gt;Possible future improvements include:&lt;/p&gt;

&lt;p&gt;Support for multiple courses.&lt;br&gt;
Notifications for deadlines and published evaluations.&lt;br&gt;
Additional progress reports for instructors.&lt;br&gt;
Session management across multiple devices.&lt;br&gt;
These are potential extensions, not features we claim are already implemented.&lt;/p&gt;

&lt;p&gt;Final Thoughts&lt;br&gt;
This project brought together several important parts of web development: authentication, authorization, relational data, validation, teamwork workflows, and testing.&lt;/p&gt;

&lt;p&gt;Replit Agent helped us turn our requirements into working code. Our responsibility was to decide what the application should do, review its behavior, and test the result.&lt;/p&gt;

&lt;p&gt;The most useful part of the project is not any individual screen. It is the connected workflow—from publishing an assignment to forming a team, submitting work, and receiving an evaluation.&lt;/p&gt;

&lt;p&gt;For us, that made the project a practical way to explore how a full-stack application supports a real process, rather than simply displaying information.&lt;/p&gt;

</description>
      <category>agents</category>
      <category>buildinpublic</category>
      <category>softwaredevelopment</category>
    </item>
  </channel>
</rss>
