Health Sciences Portal | Automata
sections (8)
$ cd .. // back to projects
automata@latam: ~/projects/education_portal
USE CASE · slug: education_portal ·2026 · 2 min read · 432 words

> Health Sciences Portal

// Collaboration portal for health-sciences students: resource library, study groups, forums, calendar, messaging and global search — all in one Laravel + Livewire app.

Laravel 12Livewire 3Flux UIMySQL 8FortifyTailwind 4
forks last commit
Health Sciences Portal
▸ role
Full-stack · Laravel · Livewire
▸ team
Solo
▸ status
ready
// section 01 · discovery

$ cat ./discovery.md

▸ overview

A single portal for university health-sciences students (Medicine, Nursing, Dentistry, Physiotherapy) that replaces the WhatsApp + Drive + email + Google Calendar fragmentation with one place to find resources, run study groups, discuss in forums, follow news and the academic calendar, and message classmates. Uploaded resources go through an approval step so the library does not become a dumping ground. The cross-content GlobalSearch component is the daily entry point.

▸ problem

Materials, study groups and announcements scatter across at least four different tools per cohort. Students lose the link to last week's PDF, miss exam dates and re-ask the same questions. The fix is not better Drive folders — it is one tool that knows about courses, members and dates.

▸ audience

Health-sciences students (primary). Academic coordinators and the institution itself (secondary).

// section 03 · architecture

$ cat ./architecture.md

// section 04 · infrastructure

$ cat ./infrastructure.md

▸ services
provider: Laravel + MySQL + Vite
  • Laravel 12 app (Livewire + Flux UI)
  • MySQL 8 (resources, forums, study_groups, events, news, ratings)
  • File storage for uploaded materials (with approval gate)
  • Laravel Fortify (auth + 2FA)
  • Vite dev server
  • Laravel scheduler (event reminders, digest jobs)
// section 05 · implementation

$ cat ./implementation.md

▸ frontend
  • · Livewire 3 + Volt 1.7
  • · Flux UI
  • · Tailwind CSS 4
  • · Alpine.js
  • · Vite
▸ backend
  • · Laravel 12
  • · PHP 8.2
  • · Laravel Fortify 1.30
▸ data
  • · MySQL
  • · Eloquent
  • · JSON columns for ratings/votes payloads
  • · Disk-backed file storage per resource
▸ devops
  • · Local dev only (no CI/CD yet)
// section 06 · technical challenges

$ cat ./challenges/*.md

// 1 technical problems solved

01 / 01
challenge-01.md · uploads · moderation · search
▸ problem

Letting students upload materials without turning the library into a junk drawer or exposing the server file layout.

constraint: All listings, search and download endpoints must respect an is_approved gate. File paths and original filenames are stored separately so the public URL never leaks the on-disk layout.

▸ approach

Resource has is_approved (default false), file_path (server-side, opaque) and file_name (display only). Every Livewire list/search scope adds where('is_approved', true). The upload flow notifies coordinators, who can approve in one click. Search across title/description/subject uses a single Livewire-debounced query.

app/Livewire/Resources/ResourceList.php php
public function render()
{
    $resources = Resource::with('user')
        ->where('is_approved', true)
        ->when($this->search, function ($query) {
            $query->where(function ($q) {
                $q->where('title',       'like', '%' . $this->search . '%')
                  ->orWhere('description','like', '%' . $this->search . '%')
                  ->orWhere('subject',    'like', '%' . $this->search . '%');
            });
        })
        ->latest()
        ->paginate(20);

    return view('livewire.resources.resource-list', compact('resources'));
}
// section 07 · testing & ci

$ cat ./testing.md

▸ strategy

Pest 4 over SQLite in-memory. Coverage focuses on auth + the approval flow + global search.

▸ tools
Pest 4.3PHPUnitPest Laravel plugin
// section 09 · results

$ cat ./results.md

01 /
10
Eloquent models (Resource, Forum, ForumTopic, ForumReply, Event, News, StudyGroup, StudentProfile, ResourceRating, User)
02 /
17
Livewire components (lists + detail views + GlobalSearch + LiveNotifications)
03 /
11
migrations
04 /
2
seeders (PortalEducativoSeeder with full sample data)
▸ outcomes

MVP delivered: auth, profiles, approved resource library, forums with topics/replies, study groups, calendar, news feed, messaging and GlobalSearch all working. Ready for institutional pilot. Roadmap: real-time messaging, push notifications, mobile wrapper, LMS integration, recommendations.

// related

$ grep -l "tech" ./projects/*

// projects that share part of the stack

// next step

$ automata deploy --your-operation

// Let's talk about adapting this to your case.

./let-s-talk.sh