Harimohan'12 alumni portal: ex-student registration, admin approval, notice board, public alumni directory, and event fee payment with bKash. Built with Laravel 13 + Tailwind v4.
翻訳待ち
ソーシャルPHP · BladeGitHub @rafiulalamantarオンライン所有者未確認
Have you tried it? One tap is enough. No sign-in needed.
The maker's introduction consists of the line above. Read the repository README for more details. Repository README ↗
Loading the full README.
Read the full README ↗Ex-student registration with admin approval, a public alumni directory, a member portal with notices, and event fee payment through bKash Tokenized Checkout. Laravel 13, PHP 8.4, Tailwind CSS v4, mobile-first.
Live: https://harimohan-12.vercel.app · New to the code? Read this file, then docs/ARCHITECTURE.md.
Visitors (welcome page)
Members
Admins (/admin, menu grouped into Members, Events and Communication)
You need PHP 8.4, Composer, Node.js 22 and MySQL 8 (or SQLite for a quick look).
git clone https://github.com/rafiulalamantar/harimohan-12.git && cd harimohan-12
composer install
npm install
cp .env.example .env
php artisan key:generate
php artisan storage:link # serves uploaded photos and banners from storage/app/public
.env.example uses SQLite. For MySQL (closer to the live site), create a database and set:
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=harimohan_local
DB_USERNAME=root
DB_PASSWORD=your-local-password
Create the tables and data, then start the app:
php artisan migrate --seed # tables, the admin, a demo member, a sample event and notice
php artisan db:seed --class=DemoAlumniSeeder # optional: 120 realistic demo alumni
composer run dev # app + Vite at http://localhost:8000
| Login (local only) | Password | |
|---|---|---|
| Super admin | ADMIN_EMAIL in .env (default [email protected]) | ADMIN_PASSWORD (default ChangeMe@123) |
| Demo member | [email protected] | Student@123 |
| Demo alumni (DemoAlumniSeeder) | [email protected] … [email protected] | password |
The demo seeders refuse to run in production. Locally, emails (password resets, member emails) are written to storage/logs/laravel.log instead of being sent.
composer run dev # run the app with live CSS/JS reloading
php artisan test --compact # all tests (in-memory SQLite, no setup needed)
php artisan test --compact --filter=StudentFieldTest
vendor/bin/pint --dirty # format the PHP files you changed
npm run build # production CSS/JS (needed if you are not running composer run dev)
php artisan route:list --except-vendor # every URL and its controller
If a page looks unstyled or you see "Unable to locate file in Vite manifest", run npm run build or composer run dev.
main (feat/..., fix/..., refactor/...).vendor/bin/pint --dirty and php artisan test --compact.main with git merge --no-ff and push. Pushing main deploys the live site. Run new migrations on production first.version in config/app.php and push an annotated tag vX.Y.Z whose message holds the release notes. CI publishes the GitHub release and updates CHANGELOG.md.Where code belongs, naming rules and the main flows (photos, payments, student fields) are explained in docs/ARCHITECTURE.md.
Locally MAIL_MAILER=log writes emails to storage/logs/laravel.log, so reset links can be copied from there.
In production use any SMTP provider. With the Brevo free plan (300 emails/day):
MAIL_MAILER=smtp
MAIL_HOST=smtp-relay.brevo.com
MAIL_PORT=587
MAIL_USERNAME=<Brevo SMTP login>
MAIL_PASSWORD=<Brevo SMTP key>
MAIL_FROM_ADDRESS=<a sender verified in Brevo>
Gmail SMTP also works (smtp.gmail.com, port 587, an App Password). Reset links expire after 60 minutes.
Uses PGW Tokenized Checkout v1.2.0-beta (app/Services/BkashService.php):
grant token (cached ~50 min)create → student is redirected to bkashURL/payment/bkash/callback?paymentID=..&status=success|failure|cancelexecute; if execute errors or times out, payment/status query is used to confirmCompleted and the amount and invoice match our record. The row is locked during this, so a page refresh can't double-execute..env:
BKASH_SANDBOX=true
BKASH_USERNAME=...
BKASH_PASSWORD=...
BKASH_APP_KEY=...
BKASH_APP_SECRET=...
This is the beginning of the README. Read the rest at the original. Read the full README ↗