feat: Phase 1 bootstrap — adapt BukidBountyApp as BarangaySystem
Some checks failed
tests / PHP 8.2 (swoole-5.1.6) (push) Has been cancelled
tests / PHP 8.3 (swoole-5.1.6) (push) Has been cancelled
tests / PHP 8.4 (swoole-6.0) (push) Has been cancelled

- Replace UserTypes with barangay roles (super_admin, punong_barangay,
  kagawad, secretary, treasurer, sk_chairperson, sk_councilor, tanod,
  bhw, daycare_worker, staff, resident, audit)
- Replace UserActions with barangay-specific permissions (residents,
  households, blotters, documents, fee payments, projects, budget)
- Replace modules config with barangay modules (residents, households,
  blotters, documents, certificates, projects, budget, announcements,
  accounting, chapters, qr_payment, subscriptions, landing_pages)
- Update app name, seeders, and landing page to barangay defaults
- Add new enums: DocumentStatus, BlotterStatus, PaymentStatus
- Add 6 new migrations: residents, households, blotters, document
  requests, projects, budget
- Add RequestTypeSeeder with default certificate fee schedule
- Update README with BarangaySystem stack, roles, and remotes
This commit is contained in:
Jonathan Sykes
2026-06-06 18:47:20 +08:00
parent eb4a5731fb
commit 19fec0933b
19 changed files with 797 additions and 1096 deletions

215
README.md
View File

@@ -1,174 +1,63 @@
TODO
# BarangaySystem
Barangay Management & Governance Platform built on Hypervel (Laravel-compatible on Hyperf/Swoole) + Vue 3 SPA.
# Member Information Record
## Stack
This document contains the member details collected for registration or profile purposes.
| Layer | Technology |
|---|---|
| Backend | Hypervel (PHP 8.x, Hyperf/Swoole) |
| Frontend | Vue 3 SPA + Pinia |
| Database | MySQL |
| Cache/Session | Redis |
| Auth | JWT (lcobucci) + Session dual guard |
| File Storage | Multi-disk (local/S3) with CDN pipeline |
| Queue | Redis-backed |
---
## Core Modules
## 🧍 Personal Information
- **Resident & Household Management** — resident profiles, household registry
- **Document/Certificate Requests** — Clearance, Residency, Indigency, Good Moral, Business Clearance + QR PH payment
- **Blotter / Incident System** — filing, hearings, resolution tracking
- **Barangay Projects** — infrastructure, livelihood, health, education projects
- **Budget & Finance** — income/expense recording, fiscal year reports
- **Geography Hierarchy** — Region → Province → City/Municipality → Barangay → Purok
- **QR PH Payment** — InstaPay/QRPH for document fees (GCash, Maya, and all major banks)
- **Announcements** — barangay bulletins
- **Admin Console** — system settings, branding, module toggles, user management, logs, backups
- **Accounting** — chart of accounts, journal entries, financial reports
| Field | Value |
|-------|-------|
| **First Name** | Rex Moran |
| **Middle Name** | - |
| **Last Name** | Loba |
| **Suffix** | - |
| **Gender** | - |
| **Date of Birth** | - |
| **Email** | rexm.loba@gmail.com |
| **Phone** | - |
## User Roles
---
| Role | Description |
|---|---|
| `super_admin` | System owner / platform administrator |
| `punong_barangay` | Barangay Captain |
| `kagawad` | Barangay Councilor |
| `secretary` | Barangay Secretary |
| `treasurer` | Barangay Treasurer |
| `sk_chairperson` | SK Chairperson |
| `sk_councilor` | SK Councilor |
| `tanod` | Barangay Tanod |
| `bhw` | Barangay Health Worker |
| `daycare_worker` | Daycare Worker |
| `staff` | Administrative Staff |
| `resident` | Registered Resident |
| `audit` | Internal Auditor |
## 📱 Social Accounts
## Git Remotes
| Platform | Account Name / Number |
|-----------|-----------------------|
| **Facebook** | - |
| **Messenger** | - |
| **Viber** | - |
| **TikTok** | - |
```
primary ssh://git@git.hesed.sbs:6611/BarangaySystem
origin ssh://git@git2.hesed.sbs:6612/josh/BarangaySystem.git
```
---
## Setup
## 🚨 Emergency Contact Information
| Field | Value |
|-------|-------|
| **Name** | - |
| **Address** | - |
| **Contact Number** | - |
| **Relation** | - |
---
## 🏛 Membership Details for Cooperatives
| Field | Value |
|-------|-------|
| **Membership Type** | - |
| **Organization Name** | - |
| **Membership Level** | - |
| **Officer Position** | - |
| **Officer Level** | - |
| **Concurrent Position** | - |
| **Concurrent Level** | - |
| **Cooperative Name** | - |
| **Cooperative Position** | - |
| **Year Beginning** | - |
---
## 🏠 Address Information
| Field | Value |
|-------|-------|
| **Address** | - |
| **Region** | - |
| **Province** | - |
| **City / Municipality** | - |
| **Barangay** | - |
---
## 👪 Family & Education
| Field | Value |
|-------|-------|
| **Civil Status** | - |
| **Number of Children** | - |
| **Highest Educational Attainment** | - |
| **Course** | - |
| **School Attended** | - |
| **Year Last Attended** | - |
---
## 💼 Employment & Livelihood
| Field | Value |
|-------|-------|
| **Current Source of Livelihood** | - |
| **Company Last Employed** | - |
| **Position in the Company** | - |
| **Year Last Employed** | - |
---
## 🆔 Government Information
| Field | Value |
|-------|-------|
| **Tax Identification Number (TIN)** | - |
| **PhilHealth ID Number** | - |
| **Government Issued ID** | - |
---
## 🖼 Supporting Documents
| Field | Value |
|-------|-------|
| **Photograph** | - |
| **Date Submitted** | - |
| **Date Approved** | - |
---
### 🗒 Notes
- Fields marked with “–” are currently unfilled.
- Update this file as new information becomes available.
- Store sensitive data responsibly and avoid committing private identifiers in public repositories.
---
📧 **Contact:** rexm.loba@gmail.com
<p align="center"><a href="https://hypervel.org" target="_blank"><img src="https://hypervel.org/logo.png" width="400"></a></p>
<p align="center">
<a href="https://github.com/hypervel/hypervel/actions"><img src="https://github.com/hypervel/hypervel/workflows/tests/badge.svg" alt="Build Status"></a>
<a href="https://packagist.org/packages/hypervel/framework"><img src="https://img.shields.io/packagist/dt/hypervel/framework" alt="Total Downloads"></a>
<a href="https://packagist.org/packages/hypervel/hypervel"><img src="https://img.shields.io/packagist/v/hypervel/hypervel" alt="Latest Stable Version"></a>
<a href="https://packagist.org/packages/hypervel/hypervel"><img src="https://img.shields.io/packagist/l/hypervel/hypervel" alt="License"></a>
</p>
## Introduction
**Hypervel** is a Laravel-style PHP framework with native coroutine support for ultra-high performance.
Hypervel ports many core components from Laravel while maintaining familiar usage patterns, making it instantly accessible to Laravel developers. The framework combines the elegant and expressive development experience of Laravel with the powerful performance benefits of coroutine-based programming. If you're a Laravel developer, you'll feel right at home with this framework, requiring minimal learning curve.
This is an ideal choice for building microservices, API gateways, and high-concurrency applications where traditional PHP frameworks often encounter performance constraints.
## Why Hypervel?
While Laravel Octane impressively enhances your Laravel application's performance, it's crucial to understand the nature of modern web applications. In most cases, the majority of latency stems from I/O operations, such as file operations, database queries, and API requests.
However, Laravel doesn't support coroutines - the entire framework is designed for a blocking I/O environment. Applications heavily dependent on I/O operations will still face performance bottlenecks. Consider this scenario:
Imagine building an AI-powered chatbot where each conversation API takes 3-5 seconds to respond. With 10 workers in Laravel Octane receiving 10 concurrent requests, all workers would be blocked until these requests complete.
> You can see [benchmark comparison](https://hypervel.org/docs/introduction.html#benchmark) between Laravel Octane and Hypervel
Even with Laravel Octane's improvements, your application's concurrent request handling capacity remains constrained by I/O operation duration. Hypervel addresses this limitation through coroutines, enabling efficient handling of concurrent I/O operations without blocking workers. This approach significantly enhances performance and concurrency for I/O-intensive applications.
> See [this issue](https://github.com/laravel/octane/issues/765) for more discussions.
## Documentation
[https://hypervel.org/docs](https://hypervel.org/docs)
Hypervel provides comprehensive and user-friendly documentation that allows you to quickly get started. From this documentation, you can learn how to use various components in Hypervel and understand the differences between this framework and Laravel.
> Most of the content in this documentation is referenced from the official Laravel documentation. We appreciate the Laravel community's contributions.
## License
The Hypervel framework is open-sourced software licensed under the [MIT](https://opensource.org/licenses/MIT) license.
```bash
cp .env.example .env
composer install
npm install
php artisan migrate --seed
npm run build
```

View File

@@ -0,0 +1,25 @@
<?php
namespace App\Enums\Barangay;
enum BlotterStatus: string
{
case FILED = 'FILED';
case FOR_HEARING = 'FOR_HEARING';
case SETTLED = 'SETTLED';
case RESOLVED = 'RESOLVED';
case DISMISSED = 'DISMISSED';
case ENDORSED = 'ENDORSED';
public function label(): string
{
return match($this) {
self::FILED => 'Filed',
self::FOR_HEARING => 'For Hearing',
self::SETTLED => 'Settled',
self::RESOLVED => 'Resolved',
self::DISMISSED => 'Dismissed',
self::ENDORSED => 'Endorsed to Higher Authority',
};
}
}

View File

@@ -0,0 +1,27 @@
<?php
namespace App\Enums\Barangay;
enum DocumentStatus: string
{
case DRAFT = 'DRAFT';
case PENDING_PAYMENT = 'PENDING_PAYMENT';
case PAID = 'PAID';
case PROCESSING = 'PROCESSING';
case READY = 'READY';
case CLAIMED = 'CLAIMED';
case CANCELLED = 'CANCELLED';
public function label(): string
{
return match($this) {
self::DRAFT => 'Draft',
self::PENDING_PAYMENT => 'Pending Payment',
self::PAID => 'Paid',
self::PROCESSING => 'Processing',
self::READY => 'Ready for Pickup',
self::CLAIMED => 'Claimed',
self::CANCELLED => 'Cancelled',
};
}
}

View File

@@ -0,0 +1,21 @@
<?php
namespace App\Enums\Barangay;
enum PaymentStatus: string
{
case PENDING = 'PENDING';
case PAID = 'PAID';
case REFUNDED = 'REFUNDED';
case WAIVED = 'WAIVED';
public function label(): string
{
return match($this) {
self::PENDING => 'Pending',
self::PAID => 'Paid',
self::REFUNDED => 'Refunded',
self::WAIVED => 'Waived',
};
}
}

View File

@@ -1,30 +1,40 @@
<?php
namespace App\Enums;
enum UserActions: string
{
// User management
case DeleteUser = 'deleteuser';
case ModifyUser = 'modifyuser';
case SetActiveUser = 'setactiveuser';
case SetInActiveUser = 'setinactiveuser';
case CreateUser = 'createuser';
case CreateUserUltimate = 'createuserultimate';
case CreateUserSuperOperator = 'createusersuperoperator';
case CreateUserOperator = 'createuseroperator';
case CreateUserCoordinator = 'createusercoordinator';
case CreateUserSupplierOverseer = 'createusersupplieroverseer';
case CreateUserWholesaleBuyer = 'createuserwholesalebuyer';
case CreateUserSupplier = 'createusersupplier';
case CreateUserStoreOwner = 'createuserstoreowner';
case CreateUserStoreManager = 'createuserstoremanager';
case CreateUserUser = 'createuseruser';
case CreateUserRider = 'createuserrider';
case CreateUserSuperAdmin = 'createusersuperadmin';
case CreateUserPunongBarangay = 'createuserpunongbarangay';
case CreateUserKagawad = 'createuserkagawad';
case CreateUserSecretary = 'createusersecretary';
case CreateUserTreasurer = 'createusertreasurer';
case CreateUserSkChairperson = 'createuserskchairperson';
case CreateUserSkCouncilor = 'createuserskcouncilor';
case CreateUserTanod = 'createusertanod';
case CreateUserBhw = 'createuserbhw';
case CreateUserDaycareWorker = 'createuserdaycareworker';
case CreateUserStaff = 'createuserstaff';
case CreateUserResident = 'createuserresident';
case CreateUserAudit = 'createuseraudit';
case CreateUserPOSTerminal = 'createuserposterminal';
// Console access
case DeveloperConsole = 'devconsole';
case UltimateConsole = 'ultconsole';
case UltimateLogs = 'ultlogs';
case UltimateReports = 'ultreports';
case UltimateMaintenance = 'ultmaintenance';
case UltimateQuery = 'ultquery';
case UltimateGlobalMessage = 'ultglobalmessage';
case UltimateFlush = 'ultflush';
// User notes/exec
case SetUserNotes = 'setusernotes';
case DeleteUserNotes = 'deleteusernotes';
case ViewUserNotes = 'viewusernotes';
@@ -35,21 +45,17 @@ enum UserActions: string
case ViewSelfExec = 'viewselfexec';
case DeleteSelfNotes = 'delteselfnotes';
case UpdateSelfExec = 'updateselfexec';
// Reports & roles
case ViewGlobalReports = 'viewglobalreports';
case ModifyGlobalReports = 'modifyglobalreports';
case DeleteGlobalReports = 'deleteglobalreports';
case ChangeUserPassword = 'changeuserpassword';
case DirectUserCreditTransfer = 'directusercredittransfer';
case ForceLogoutUser = 'forcelogoutuser';
case UserAllowedtoChangeAnotherUserRoles = 'userchangeroles';
case UserAllowedtoViewSelfRoles = 'selfviewroles';
case UserAllowedtoViewOtherUserRoles = 'userviewroles';
case UserAllowedtoViewAllRoles = 'viewallroles';
case ChangeAnotherUsersParent = 'changeotherusersparents';
case ViewAllUserTypes = 'viewallusertypes';
case ListAllUsersAsParentforUserCreation = 'listallusersasparentforUserCreation';
@@ -57,88 +63,64 @@ enum UserActions: string
case CheckifMobileNumberExists = 'checkifmobilenumberexists';
case BypassMobileNumberFormat = 'bypassmobilenumberformat';
case CreateStoreforSelf = 'createstoreforself';
case CreateProductforSelf = 'createproductforself';
case CreateStoreGlobal = 'createstoreglobal';
case CreateProductGlobal = 'createproductglobal';
case CreateProductForOwnStore = 'createproductforownstore';
case ViewOwnStores = 'viewownstores';
case ViewAllStores = 'viewallstores';
case ViewAllProducts = 'viewallproducts';
case ViewOwnProducts = 'viewownproducts';
case ModifyOwnStore = 'modifyownstore';
case ModifyOwnProduct = 'modifyownproduct';
case AddProducttoOwnStore = 'addproducttoownstore';
case DeleteOwnStore = 'deleteownstore';
case DeleteOwnProduct = 'deleteownproduct';
case ModifyAllStores = 'modifyallstores';
case ModifyAllProducts = 'modifyallproducts';
case DeleteAllStores = 'deleteallstores';
case DeleteAllProducts = 'deleteallproducts';
// Files
case UploadAllFiles = 'uploadallfiles';
case ViewAllFiles = 'viewallfiles';
case DeleteAllFiles = 'deleteallfiles';
case ModifyAllFiles = 'modifyallfiles';
case AddProducttoAnyStore = 'addproducttoanystore';
case RemoveProductfromAnyStore = 'removeproductfromanystore';
// Announcements
case CreateAnnouncement = 'createannouncement';
case ModifyAnnouncement = 'modifyannouncement';
case DeleteAnnouncement = 'deleteannouncement';
case ViewAllAnnouncements = 'viewallannouncements';
case ViewFarmers = 'viewfarmers';
case VerifyFarmer = 'verifyfarmer';
case CreateOrganization = 'createorganization';
case ViewOrganizations = 'vieworganizations';
case ViewShipments = 'viewshipments';
case CreateShipment = 'createshipment';
case UpdateShipmentStatus = 'updateshipmentstatus';
case CreateCourier = 'createcourier';
case ViewCouriers = 'viewcouriers';
case ViewGlobalTransactions = 'viewglobaltransactions';
case CreateGlobalTransaction = 'createglobaltransaction';
case ViewAccountingReports = 'viewaccountingreports';
case ManageAccounting = 'manageaccounting';
case ViewProperties = 'viewproperties';
case ViewReferrals = 'viewreferrals';
case ViewPosAccessKeys = 'viewposaccesskeys';
case CreatePosAccessKey = 'createposaccesskey';
case DeletePosAccessKey = 'deleteposaccesskey';
case TogglePosAccessKey = 'toggleposaccesskey';
case ViewPosReports = 'viewposreports';
case ViewCustomers = 'viewcustomers';
case ManageOrganizations = 'manageorganizations';
case JoinCooperative = 'joincooperative';
// User info & settings
case ViewUserInfo = 'viewuserinfo';
case ManageUserInfo = 'manageuserinfo';
case UltimateMaintenance = 'ultmaintenance';
case UltimateQuery = 'ultquery';
case UltimateBatch = 'ultbatch';
case UltimateGlobalMessage = 'ultglobalmessage';
case UltimateFlush = 'ultflush';
case ManageLandingPages = 'managelandingpages';
case CreateResolution = 'createresolution';
case VoteResolution = 'voteresolution';
case ViewResolutions = 'viewresolutions';
// QR PH Payment
case ManageQrphPaymentCode = 'manageqrphpaymentcode';
case SearchStockPhotos = 'searchstockphotos';
case DownloadStockPhoto = 'downloadstockphoto';
// Chapters / Geography
case ViewChapterOrgChart = 'viewchapterorgchart';
case ManageChapterMembers = 'managechaptermembers';
case ViewScopedMemberReports = 'viewscopedmemberreports';
case AssignChapterOfficer = 'assignchapterofficer';
// Accounting
case ViewAccountingReports = 'viewaccountingreports';
case ManageAccounting = 'manageaccounting';
// Barangay residents & households
case ViewResidents = 'viewresidents';
case ManageResidents = 'manageresidents';
case ImportResidents = 'importresidents';
case ExportResidents = 'exportresidents';
case ViewHouseholds = 'viewhouseholds';
case ManageHouseholds = 'managehouseholds';
// Barangay documents & certificates
case ViewDocumentRequests = 'viewdocumentrequests';
case CreateDocumentRequest = 'createdocumentrequest';
case ProcessDocumentRequest = 'processdocumentrequest';
case ManageRequestTypes = 'managerequesttypes';
case ManageFeeSchedules = 'managefeeschedules';
// Blotter / Incident
case ViewBlotters = 'viewblotters';
case CreateBlotter = 'createblotter';
case ProcessBlotter = 'processblotter';
case ManageBlotterHearings = 'manageblotterhearings';
// Barangay projects & budget
case ViewBarangayProjects = 'viewbarangayprojects';
case ManageBarangayProjects = 'managebarangayprojects';
case ViewBarangayBudget = 'viewbarangaybudget';
case ManageBarangayBudget = 'managebarangaybudget';
// Fee payments
case ViewFeePayments = 'viewfeepayments';
case ManageFeePayments = 'managefeepayments';
}

View File

@@ -4,23 +4,20 @@ namespace App\Enums;
enum UserTypes: string
{
case ULTIMATE = 'ult';
case SUPER_OPERATOR = 'super operator';
case OPERATOR = 'operator';
case COORDINATOR = 'coordinator';
case COOP_OFFICER = 'coop officer';
case COOP_MEMBER = 'coop member';
case SUPPLIER_OVERSEER = 'supplier overseer';
case WHOLESALE_BUYER = 'wholesale buyer';
case SUPPLIER = 'supplier';
case STORE_OWNER = 'store owner';
case STORE_MANAGER = 'store manager';
case USER = 'user';
case RIDER = 'rider';
case SUPER_ADMIN = 'super_admin';
case PUNONG_BARANGAY = 'punong_barangay';
case BARANGAY_KAGAWAD = 'kagawad';
case SECRETARY = 'secretary';
case TREASURER = 'treasurer';
case SK_CHAIRPERSON = 'sk_chairperson';
case SK_COUNCILOR = 'sk_councilor';
case BARANGAY_TANOD = 'tanod';
case BHW = 'bhw';
case DAYCARE_WORKER = 'daycare_worker';
case STAFF = 'staff';
case RESIDENT = 'resident';
case AUDIT = 'audit';
case POS_TERMINAL = 'pos terminal';
case ANY_USER = 'default';
case PUBLIC = 'public';
}

View File

@@ -18,7 +18,7 @@ return [
|
*/
'name' => env('APP_NAME', 'BukidBountyApp'),
'name' => env('APP_NAME', 'BarangaySystem'),
/*
|--------------------------------------------------------------------------

View File

@@ -20,162 +20,145 @@ return [
|--------------------------------------------------------------------------
| Master System Toggle
|--------------------------------------------------------------------------
| If set to false, all module-specific middleware checks will be bypassed.
| Useful for development or full-feature environments.
*/
'system_enabled' => (bool) env('MODULES_SYSTEM_ENABLED', true),
/*
|--------------------------------------------------------------------------
| POS (Point of Sale)
| Residents
|--------------------------------------------------------------------------
| Includes: POS terminal, sessions, item management, stats, access keys
*/
'pos' => [
'enabled' => (bool) env('MODULE_POS_ENABLED', true),
'label' => 'Point of Sale (POS)',
'description' => 'POS terminal operations, sessions, sales, and access keys.',
'residents' => [
'enabled' => (bool) env('MODULE_RESIDENTS_ENABLED', true),
'label' => 'Resident Management',
'description' => 'Resident registration, profiles, and search.',
],
/*
|--------------------------------------------------------------------------
| Products
| Households
|--------------------------------------------------------------------------
| Includes: Product CRUD, categories, store assignments, batch add
*/
'products' => [
'enabled' => (bool) env('MODULE_PRODUCTS_ENABLED', true),
'label' => 'Product Management',
'description' => 'Product creation, editing, categories, and store assignments.',
'households' => [
'enabled' => (bool) env('MODULE_HOUSEHOLDS_ENABLED', true),
'label' => 'Household Management',
'description' => 'Household registration and member management.',
],
/*
|--------------------------------------------------------------------------
| Stores
| Blotters / Incidents
|--------------------------------------------------------------------------
| Includes: Store CRUD, management, product removal from store
*/
'stores' => [
'enabled' => (bool) env('MODULE_STORES_ENABLED', true),
'label' => 'Store Management',
'description' => 'Store creation, editing, and product-store relationships.',
'blotters' => [
'enabled' => (bool) env('MODULE_BLOTTERS_ENABLED', true),
'label' => 'Blotter & Incident System',
'description' => 'Incident filing, hearings, and resolution tracking.',
],
/*
|--------------------------------------------------------------------------
| Shipments
| Documents / Certificates
|--------------------------------------------------------------------------
| Includes: Shipment tracking, couriers, status updates
*/
'shipments' => [
'enabled' => (bool) env('MODULE_SHIPMENTS_ENABLED', true),
'label' => 'Shipments & Logistics',
'description' => 'Shipment tracking, courier management, and delivery status.',
'documents' => [
'enabled' => (bool) env('MODULE_DOCUMENTS_ENABLED', true),
'label' => 'Document Management',
'description' => 'Document storage, retrieval, and version control.',
],
/*
|--------------------------------------------------------------------------
| Farmers
| Certificate Requests
|--------------------------------------------------------------------------
| Includes: Farmer registration, listing, verification, organizations
*/
'farmers' => [
'enabled' => (bool) env('MODULE_FARMERS_ENABLED', true),
'label' => 'Farmer Management',
'description' => 'Farmer registration, profile management, and verification.',
'certificates' => [
'enabled' => (bool) env('MODULE_CERTIFICATES_ENABLED', true),
'label' => 'Certificate Request & Printing',
'description' => 'End-to-end certificate request, payment, and printing workflow.',
],
/*
|--------------------------------------------------------------------------
| Cooperatives
| Barangay Projects
|--------------------------------------------------------------------------
| Includes: Cooperative CRUD, members, documents, governance, chapters
*/
'cooperatives' => [
'enabled' => (bool) env('MODULE_COOPERATIVES_ENABLED', true),
'label' => 'Cooperatives & Organizations',
'description' => 'Cooperative management, membership, documents, and governance.',
'projects' => [
'enabled' => (bool) env('MODULE_PROJECTS_ENABLED', true),
'label' => 'Barangay Projects',
'description' => 'Project tracking, budgets, and status updates.',
],
/*
|--------------------------------------------------------------------------
| Budget & Finance
|--------------------------------------------------------------------------
*/
'budget' => [
'enabled' => (bool) env('MODULE_BUDGET_ENABLED', true),
'label' => 'Budget & Finance',
'description' => 'Annual budget, income/expense recording, and reports.',
],
/*
|--------------------------------------------------------------------------
| Announcements
|--------------------------------------------------------------------------
*/
'announcements' => [
'enabled' => (bool) env('MODULE_ANNOUNCEMENTS_ENABLED', true),
'label' => 'Announcements',
'description' => 'Barangay bulletins and public announcements.',
],
/*
|--------------------------------------------------------------------------
| Accounting
|--------------------------------------------------------------------------
| Includes: Account trees, transactions, daily entries, reports
*/
'accounting' => [
'enabled' => (bool) env('MODULE_ACCOUNTING_ENABLED', true),
'label' => 'Accounting & Finance',
'description' => 'Chart of accounts, transaction records, and financial reports.',
'label' => 'Accounting',
'description' => 'Chart of accounts, journal entries, and financial reports.',
],
/*
|--------------------------------------------------------------------------
| Store-Level Accounting
| Geography / Chapter Hierarchy
|--------------------------------------------------------------------------
| Controls whether Store Owner / Store Manager can access the Accounting
| Dashboard and Manage Accounts pages. Big 3 are never affected by this.
| Toggle via UltimateConsole → Module Controls at runtime.
*/
'accounting_store' => [
'enabled' => (bool) env('MODULE_ACCOUNTING_STORE_ENABLED', true),
'label' => 'Store Accounting Access',
'description' => 'Grants Store Owner and Store Manager access to the Accounting Dashboard and their store\'s Chart of Accounts. Disable to hide accounting from store-level users.',
'chapters' => [
'enabled' => (bool) env('MODULE_CHAPTERS_ENABLED', true),
'label' => 'Geography Hierarchy',
'description' => 'Region → Province → City/Municipality → Barangay → Purok structure.',
],
/*
|--------------------------------------------------------------------------
| Transactions
| QR PH Payment
|--------------------------------------------------------------------------
| Includes: Global transaction listing, creation, types
*/
'transactions' => [
'enabled' => (bool) env('MODULE_TRANSACTIONS_ENABLED', true),
'label' => 'Global Transactions',
'description' => 'System-wide transaction recording and listing.',
'qr_payment' => [
'enabled' => (bool) env('MODULE_QR_PAYMENT_ENABLED', true),
'label' => 'QR PH Payment',
'description' => 'InstaPay/QR PH payment for document fees.',
],
/*
|--------------------------------------------------------------------------
| Properties
| Fee Plans / Subscriptions
|--------------------------------------------------------------------------
| Includes: Property listing, referrals
*/
'properties' => [
'enabled' => (bool) env('MODULE_PROPERTIES_ENABLED', true),
'label' => 'Property Management',
'description' => 'Property listings, referrals, and lead management.',
],
/*
|--------------------------------------------------------------------------
| Cart
|--------------------------------------------------------------------------
| Includes: Shopping cart operations
*/
'cart' => [
'enabled' => (bool) env('MODULE_CART_ENABLED', true),
'label' => 'Shopping Cart',
'description' => 'Cart operations for the marketplace.',
],
/*
|--------------------------------------------------------------------------
| Credits / Wallet
|--------------------------------------------------------------------------
| Includes: Top-up, transfer credit, wallet data
*/
'credits' => [
'enabled' => (bool) env('MODULE_CREDITS_ENABLED', true),
'label' => 'Credits & Wallet',
'description' => 'Credit top-up, transfers, and wallet management.',
'subscriptions' => [
'enabled' => (bool) env('MODULE_SUBSCRIPTIONS_ENABLED', true),
'label' => 'Fee Plans',
'description' => 'Fee schedules for certificate types and barangay services.',
],
/*
|--------------------------------------------------------------------------
| Landing Pages
|--------------------------------------------------------------------------
| Includes: Landing page editor, public rendering
*/
'landing_pages' => [
'enabled' => (bool) env('MODULE_LANDING_PAGES_ENABLED', true),
@@ -183,28 +166,4 @@ return [
'description' => 'Custom landing page creation and management.',
],
/*
|--------------------------------------------------------------------------
| Announcements
|--------------------------------------------------------------------------
| Includes: Announcement CRUD, latest public announcements
*/
'announcements' => [
'enabled' => (bool) env('MODULE_ANNOUNCEMENTS_ENABLED', true),
'label' => 'Announcements',
'description' => 'System-wide announcements and notifications.',
],
/*
|--------------------------------------------------------------------------
| Batch Operations
|--------------------------------------------------------------------------
| Includes: Batch creation of products, stores, users
*/
'batch' => [
'enabled' => (bool) env('MODULE_BATCH_ENABLED', true),
'label' => 'Batch Operations',
'description' => 'Bulk creation of products, stores, and user accounts.',
],
];

View File

@@ -0,0 +1,62 @@
<?php
declare(strict_types=1);
use Hyperf\Database\Schema\Blueprint;
use Hyperf\Database\Schema\Schema;
use Hyperf\Database\Migrations\Migration;
class CreateBarangayResidentsTable extends Migration
{
public function up(): void
{
Schema::create('barangay_residents', function (Blueprint $table) {
$table->id();
$table->string('hashkey')->unique()->nullable();
$table->unsignedBigInteger('user_id')->nullable()->index();
$table->string('firstname');
$table->string('middlename')->nullable();
$table->string('lastname');
$table->string('suffix')->nullable();
$table->date('dob')->nullable();
$table->string('birthplace')->nullable();
$table->enum('gender', ['MALE', 'FEMALE', 'OTHER'])->nullable();
$table->enum('civil_status', ['SINGLE', 'MARRIED', 'WIDOWED', 'SEPARATED', 'ANNULLED'])->nullable();
$table->string('citizenship')->nullable()->default('Filipino');
$table->string('religion')->nullable();
$table->string('occupation')->nullable();
$table->decimal('monthly_income', 12, 2)->nullable();
$table->string('blood_type')->nullable();
$table->boolean('voter_status')->default(false);
$table->string('registered_voter_id')->nullable();
$table->string('voter_precinct')->nullable();
$table->boolean('head_of_household')->default(false);
// Address
$table->string('purok')->nullable();
$table->string('street')->nullable();
$table->string('barangay')->nullable();
$table->string('city')->nullable();
$table->string('province')->nullable();
$table->string('region')->nullable();
// Government IDs
$table->string('philhealth_id')->nullable();
$table->string('sss_id')->nullable();
$table->string('gsis_id')->nullable();
$table->string('tin')->nullable();
// Emergency contact
$table->string('emergency_contact_name')->nullable();
$table->string('emergency_contact_phone')->nullable();
$table->string('emergency_contact_address')->nullable();
$table->boolean('is_active')->default(true);
$table->unsignedBigInteger('created_by')->nullable();
$table->unsignedBigInteger('updated_by')->nullable();
$table->timestamps();
$table->softDeletes();
});
}
public function down(): void
{
Schema::dropIfExists('barangay_residents');
}
}

View File

@@ -0,0 +1,51 @@
<?php
declare(strict_types=1);
use Hyperf\Database\Schema\Blueprint;
use Hyperf\Database\Schema\Schema;
use Hyperf\Database\Migrations\Migration;
class CreateBarangayHouseholdsTable extends Migration
{
public function up(): void
{
Schema::create('barangay_households', function (Blueprint $table) {
$table->id();
$table->string('hashkey')->unique()->nullable();
$table->string('household_no')->unique()->nullable();
$table->unsignedBigInteger('head_resident_id')->nullable()->index();
$table->string('address')->nullable();
$table->string('purok')->nullable();
$table->string('barangay')->nullable();
$table->string('city')->nullable();
$table->string('province')->nullable();
$table->unsignedInteger('member_count')->default(0);
$table->enum('ownership_type', ['OWNED', 'RENTED', 'SHARED'])->nullable();
$table->decimal('monthly_rental', 10, 2)->nullable();
$table->boolean('has_electricity')->default(false);
$table->boolean('has_water')->default(false);
$table->string('housing_material')->nullable();
$table->boolean('is_active')->default(true);
$table->unsignedBigInteger('created_by')->nullable();
$table->unsignedBigInteger('updated_by')->nullable();
$table->timestamps();
$table->softDeletes();
});
Schema::create('barangay_household_members', function (Blueprint $table) {
$table->id();
$table->unsignedBigInteger('household_id')->index();
$table->unsignedBigInteger('resident_id')->index();
$table->string('relationship_to_head')->nullable();
$table->boolean('is_active')->default(true);
$table->timestamps();
});
}
public function down(): void
{
Schema::dropIfExists('barangay_household_members');
Schema::dropIfExists('barangay_households');
}
}

View File

@@ -0,0 +1,61 @@
<?php
declare(strict_types=1);
use Hyperf\Database\Schema\Blueprint;
use Hyperf\Database\Schema\Schema;
use Hyperf\Database\Migrations\Migration;
class CreateBarangayBlottersTable extends Migration
{
public function up(): void
{
Schema::create('barangay_blotters', function (Blueprint $table) {
$table->id();
$table->string('hashkey')->unique()->nullable();
$table->string('blotter_no')->unique()->nullable();
$table->unsignedBigInteger('complainant_user_id')->nullable()->index();
$table->string('complainant_name');
$table->string('complainant_contact')->nullable();
$table->unsignedBigInteger('respondent_user_id')->nullable()->index();
$table->string('respondent_name')->nullable();
$table->string('respondent_contact')->nullable();
$table->enum('incident_type', ['AMICABLE', 'UNLAWFUL', 'MINOR', 'OTHER'])->default('AMICABLE');
$table->date('incident_date')->nullable();
$table->string('incident_location')->nullable();
$table->text('narrative')->nullable();
$table->enum('status', ['FILED', 'FOR_HEARING', 'SETTLED', 'RESOLVED', 'DISMISSED', 'ENDORSED'])->default('FILED');
$table->timestamp('complaint_date')->nullable();
$table->unsignedBigInteger('filed_by')->nullable();
$table->unsignedBigInteger('assigned_officer_id')->nullable()->index();
$table->text('resolution')->nullable();
$table->string('settlement_type')->nullable();
$table->string('endorsed_to')->nullable();
$table->boolean('is_active')->default(true);
$table->unsignedBigInteger('created_by')->nullable();
$table->unsignedBigInteger('updated_by')->nullable();
$table->timestamps();
$table->softDeletes();
});
Schema::create('barangay_blotter_hearings', function (Blueprint $table) {
$table->id();
$table->unsignedBigInteger('blotter_id')->index();
$table->timestamp('hearing_date')->nullable();
$table->enum('status', ['SCHEDULED', 'HELD', 'POSTPONED'])->default('SCHEDULED');
$table->unsignedBigInteger('officer_id')->nullable();
$table->text('notes')->nullable();
$table->text('resolution')->nullable();
$table->timestamp('next_hearing_date')->nullable();
$table->unsignedBigInteger('created_by')->nullable();
$table->unsignedBigInteger('updated_by')->nullable();
$table->timestamps();
});
}
public function down(): void
{
Schema::dropIfExists('barangay_blotter_hearings');
Schema::dropIfExists('barangay_blotters');
}
}

View File

@@ -0,0 +1,70 @@
<?php
declare(strict_types=1);
use Hyperf\Database\Schema\Blueprint;
use Hyperf\Database\Schema\Schema;
use Hyperf\Database\Migrations\Migration;
class CreateBarangayDocumentRequestsTable extends Migration
{
public function up(): void
{
Schema::create('barangay_request_types', function (Blueprint $table) {
$table->id();
$table->string('hashkey')->unique()->nullable();
$table->string('name');
$table->string('code')->unique();
$table->text('description')->nullable();
$table->decimal('base_fee', 10, 2)->default(0);
$table->unsignedInteger('processing_days')->default(1);
$table->boolean('is_active')->default(true);
$table->boolean('requires_clearance')->default(false);
$table->unsignedBigInteger('created_by')->nullable();
$table->unsignedBigInteger('updated_by')->nullable();
$table->timestamps();
});
Schema::create('barangay_document_requests', function (Blueprint $table) {
$table->id();
$table->string('hashkey')->unique()->nullable();
$table->string('request_no')->unique()->nullable();
$table->unsignedBigInteger('resident_user_id')->nullable()->index();
$table->unsignedBigInteger('request_type_id')->index();
$table->text('purpose')->nullable();
$table->decimal('fee_amount', 10, 2)->default(0);
$table->enum('payment_status', ['PENDING', 'PAID', 'REFUNDED', 'WAIVED'])->default('PENDING');
$table->enum('payment_method', ['CASH', 'GCASH', 'QRPH', 'BANK', 'WAIVED'])->nullable();
$table->string('payment_ref')->nullable();
$table->text('qrph_code')->nullable();
$table->enum('status', ['DRAFT', 'PENDING_PAYMENT', 'PAID', 'PROCESSING', 'READY', 'CLAIMED', 'CANCELLED'])->default('DRAFT');
$table->unsignedBigInteger('requested_by')->nullable();
$table->unsignedBigInteger('processed_by')->nullable();
$table->timestamp('claimed_at')->nullable();
$table->text('notes')->nullable();
$table->unsignedBigInteger('created_by')->nullable();
$table->unsignedBigInteger('updated_by')->nullable();
$table->timestamps();
$table->softDeletes();
});
Schema::create('barangay_request_payments', function (Blueprint $table) {
$table->id();
$table->unsignedBigInteger('request_id')->index();
$table->decimal('amount', 10, 2);
$table->enum('method', ['CASH', 'GCASH', 'QRPH', 'BANK', 'WAIVED']);
$table->string('reference')->nullable();
$table->text('qrph_raw')->nullable();
$table->timestamp('paid_at')->nullable();
$table->unsignedBigInteger('verified_by')->nullable();
$table->timestamps();
});
}
public function down(): void
{
Schema::dropIfExists('barangay_request_payments');
Schema::dropIfExists('barangay_document_requests');
Schema::dropIfExists('barangay_request_types');
}
}

View File

@@ -0,0 +1,40 @@
<?php
declare(strict_types=1);
use Hyperf\Database\Schema\Blueprint;
use Hyperf\Database\Schema\Schema;
use Hyperf\Database\Migrations\Migration;
class CreateBarangayProjectsTable extends Migration
{
public function up(): void
{
Schema::create('barangay_projects', function (Blueprint $table) {
$table->id();
$table->string('hashkey')->unique()->nullable();
$table->string('project_name');
$table->text('description')->nullable();
$table->enum('type', ['INFRASTRUCTURE', 'LIVELIHOOD', 'HEALTH', 'EDUCATION', 'ENVIRONMENT', 'OTHERS'])->default('INFRASTRUCTURE');
$table->decimal('budget', 15, 2)->nullable();
$table->enum('fund_source', ['GENERAL_FUND', 'SK', 'PROVINCE', 'NATIONAL', 'OTHERS'])->default('GENERAL_FUND');
$table->date('start_date')->nullable();
$table->date('end_date')->nullable();
$table->enum('status', ['PLANNED', 'ONGOING', 'COMPLETED', 'SUSPENDED', 'CANCELLED'])->default('PLANNED');
$table->string('implementing_office')->nullable();
$table->string('contractor')->nullable();
$table->string('location')->nullable();
$table->unsignedInteger('beneficiaries_count')->nullable();
$table->boolean('is_active')->default(true);
$table->unsignedBigInteger('created_by')->nullable();
$table->unsignedBigInteger('updated_by')->nullable();
$table->timestamps();
$table->softDeletes();
});
}
public function down(): void
{
Schema::dropIfExists('barangay_projects');
}
}

View File

@@ -0,0 +1,35 @@
<?php
declare(strict_types=1);
use Hyperf\Database\Schema\Blueprint;
use Hyperf\Database\Schema\Schema;
use Hyperf\Database\Migrations\Migration;
class CreateBarangayBudgetTable extends Migration
{
public function up(): void
{
Schema::create('barangay_budget', function (Blueprint $table) {
$table->id();
$table->string('hashkey')->unique()->nullable();
$table->string('fiscal_year', 4);
$table->enum('category', ['INCOME', 'EXPENSE']);
$table->string('source');
$table->decimal('amount', 15, 2);
$table->text('description')->nullable();
$table->date('date')->nullable();
$table->string('reference')->nullable();
$table->unsignedBigInteger('encoded_by')->nullable();
$table->unsignedBigInteger('created_by')->nullable();
$table->unsignedBigInteger('updated_by')->nullable();
$table->timestamps();
$table->softDeletes();
});
}
public function down(): void
{
Schema::dropIfExists('barangay_budget');
}
}

View File

@@ -12,5 +12,6 @@ class DatabaseSeeder extends \Hyperf\Database\Seeders\Seeder
(new UpdateUserInfoSeeder)->run();
(new AccountSeeder)->run();
(new LandingPageSeeder)->run();
(new RequestTypeSeeder)->run();
}
}

View File

@@ -28,672 +28,76 @@ class LandingPageSeeder extends \Hyperf\Database\Seeders\Seeder
{
return [
[
'title' => 'Bigkis Inc | Bisigco',
'description' => 'National agricultural cooperative landing page — Bigkis Inc & Bisigco (Philippines).',
'html_content' => $this->bigkisTemplate(),
],
[
'title' => 'Bigkis Inc | Bisigco v2',
'description' => 'Modern, dynamic, and premium landing page for Bigkis Inc & Bisigco.',
'html_content' => $this->bigkisTemplateV2(),
'title' => 'Barangay System — Default Landing',
'description' => 'Default landing page for the Barangay Management & Governance Platform.',
'html_content' => $this->defaultTemplate(),
],
];
}
private function bigkisTemplate(): string
private function defaultTemplate(): string
{
return <<<'HTML'
<section style="background: linear-gradient(135deg, #0038a8 0%, #0a4dbd 50%, #ce1126 100%); color: #fff; padding: 80px 20px; text-align: center; position: relative; overflow: hidden;">
<div style="position: absolute; inset: 0; background: radial-gradient(circle at 20% 30%, rgba(252,209,22,0.18) 0%, transparent 50%), radial-gradient(circle at 80% 70%, rgba(255,255,255,0.12) 0%, transparent 50%);"></div>
<div style="position: relative; max-width: 1100px; margin: 0 auto;">
<div style="display: flex; justify-content: center; align-items: center; gap: 24px; margin-bottom: 24px;">
<img src="https://cdn.jsdelivr.net/gh/telemagnadon/publicforCDN@latest/assets/bigkis_logo.jpg" alt="Bigkis Inc Logo" style="width: 180px; height: 180px; border-radius: 50%; background: #fff; padding: 8px; box-shadow: 0 12px 40px rgba(0,0,0,0.35); object-fit: cover;">
<div style="width: 3px; height: 120px; background: rgba(252,209,22,0.8); border-radius: 2px;"></div>
<img src="https://cdn.jsdelivr.net/gh/telemagnadon/publicforCDN@latest/assets/bisigco.png" alt="Bisigco Logo" style="width: 180px; height: 180px; border-radius: 50%; background: #fff; padding: 8px; box-shadow: 0 12px 40px rgba(0,0,0,0.35); object-fit: cover;">
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Barangay System</title>
<style>
* { box-sizing: border-box; margin: 0; padding: 0; }
body { font-family: 'Segoe UI', sans-serif; background: #f0f4ff; color: #1a1a2e; }
header { background: #1a3c6e; color: #fff; padding: 20px 40px; display: flex; align-items: center; gap: 16px; }
header img { height: 48px; }
header h1 { font-size: 1.5rem; }
.hero { background: linear-gradient(135deg, #1a3c6e 0%, #2563eb 100%); color: #fff; text-align: center; padding: 80px 20px; }
.hero h2 { font-size: 2.5rem; margin-bottom: 16px; }
.hero p { font-size: 1.1rem; opacity: 0.9; max-width: 600px; margin: 0 auto 32px; }
.hero a { display: inline-block; background: #fff; color: #1a3c6e; font-weight: 700; padding: 14px 36px; border-radius: 8px; text-decoration: none; font-size: 1rem; }
.services { display: flex; flex-wrap: wrap; justify-content: center; gap: 24px; padding: 60px 40px; background: #fff; }
.service-card { background: #f0f4ff; border-radius: 12px; padding: 28px 24px; width: 220px; text-align: center; }
.service-card .icon { font-size: 2.5rem; margin-bottom: 12px; }
.service-card h3 { font-size: 1rem; margin-bottom: 8px; color: #1a3c6e; }
.service-card p { font-size: 0.85rem; color: #555; }
footer { background: #1a3c6e; color: #fff; text-align: center; padding: 24px; font-size: 0.85rem; }
</style>
</head>
<body>
<header>
<h1>Barangay System</h1>
</header>
<section class="hero">
<h2>Serving Our Community</h2>
<p>Request barangay certificates, report incidents, and access government services — online, anytime.</p>
<a href="/login">Access Portal</a>
</section>
<section class="services">
<div class="service-card">
<div class="icon">📄</div>
<h3>Certificate Requests</h3>
<p>Barangay Clearance, Residency, Indigency, Good Moral & more</p>
</div>
<div style="display: inline-block; background: rgba(252,209,22,0.95); color: #0038a8; padding: 6px 18px; border-radius: 999px; font-weight: 800; font-size: 0.85rem; letter-spacing: 0.12em; text-transform: uppercase; margin-bottom: 16px;">Est. 2022 &middot; Philippines</div>
<h1 style="font-size: 3.25rem; font-weight: 900; margin-bottom: 12px; line-height: 1.05; text-shadow: 0 4px 20px rgba(0,0,0,0.3);">BIGKIS INC <span style="opacity: 0.85;">|</span> BISIGCO</h1>
<p style="font-size: 1.35rem; font-weight: 700; color: #fcd116; margin-bottom: 8px; letter-spacing: 0.05em;">Bigkis Bayanihang Masa &middot; Sincere Advocacy &middot; Responsible Action</p>
<p style="font-size: 1.1rem; max-width: 760px; margin: 0 auto 36px; opacity: 0.95; line-height: 1.6;">A national agricultural cooperative uniting <strong style="color: #fcd116;">over 1 million members worldwide</strong> &mdash; empowering Filipino farmers, growers, and communities through unity, livelihood, and shared prosperity.</p>
<div style="display: flex; gap: 14px; justify-content: center; flex-wrap: wrap;">
<a href="/login" style="display: inline-block; background: #fcd116; color: #0038a8; padding: 16px 42px; border-radius: 50px; font-weight: 800; text-decoration: none; font-size: 1.05rem; box-shadow: 0 8px 24px rgba(252,209,22,0.45);">Become a Member</a>
<a href="#about" style="display: inline-block; background: rgba(255,255,255,0.15); color: #fff; padding: 16px 42px; border-radius: 50px; font-weight: 800; text-decoration: none; font-size: 1.05rem; border: 2px solid rgba(255,255,255,0.4); backdrop-filter: blur(8px);">Learn More</a>
<div class="service-card">
<div class="icon">📋</div>
<h3>Blotter Filing</h3>
<p>File incidents and track hearing schedules online</p>
</div>
<div class="service-card">
<div class="icon">👥</div>
<h3>Resident Records</h3>
<p>Manage resident and household information</p>
</div>
</section>
<section style="background: #fff; padding: 30px 20px; border-bottom: 4px solid #fcd116;">
<div style="max-width: 1100px; margin: 0 auto; display: grid; grid-template-columns: repeat(auto-fit, minmax(180px, 1fr)); gap: 24px; text-align: center;">
<div><div style="font-size: 2.4rem; font-weight: 900; color: #0038a8;">1M+</div><div style="font-size: 0.9rem; color: #555; font-weight: 600; text-transform: uppercase; letter-spacing: 0.08em;">Members Worldwide</div></div>
<div><div style="font-size: 2.4rem; font-weight: 900; color: #ce1126;">81</div><div style="font-size: 0.9rem; color: #555; font-weight: 600; text-transform: uppercase; letter-spacing: 0.08em;">Provinces Reached</div></div>
<div><div style="font-size: 2.4rem; font-weight: 900; color: #0a8a3e;">100%</div><div style="font-size: 0.9rem; color: #555; font-weight: 600; text-transform: uppercase; letter-spacing: 0.08em;">Filipino-Led</div></div>
<div><div style="font-size: 2.4rem; font-weight: 900; color: #b8860b;">2022</div><div style="font-size: 0.9rem; color: #555; font-weight: 600; text-transform: uppercase; letter-spacing: 0.08em;">Year Established</div></div>
<div class="service-card">
<div class="icon">📢</div>
<h3>Announcements</h3>
<p>Stay updated on barangay news and events</p>
</div>
</section>
<section id="about" style="padding: 80px 20px; background: linear-gradient(180deg, #f7faff 0%, #fff 100%);">
<div style="max-width: 1100px; margin: 0 auto;">
<div style="display: grid; grid-template-columns: repeat(auto-fit, minmax(320px, 1fr)); gap: 48px; align-items: center;">
<div>
<div style="display: inline-block; color: #ce1126; font-weight: 800; font-size: 0.9rem; letter-spacing: 0.15em; text-transform: uppercase; margin-bottom: 12px;">About the Cooperative</div>
<h2 style="font-size: 2.4rem; font-weight: 900; color: #0038a8; margin-bottom: 18px; line-height: 1.15;">Unity in Action. Livelihood for All.</h2>
<p style="font-size: 1.05rem; line-height: 1.75; color: #333; margin-bottom: 16px;"><strong>Bigkis Inc</strong> (Bigkis Bayanihang Masa, Sincere Advocacy, Responsible Action Incorporated) is a nationwide cooperative movement built on the Filipino spirit of <em>bayanihan</em> &mdash; collective effort for the common good.</p>
<p style="font-size: 1.05rem; line-height: 1.75; color: #333; margin-bottom: 16px;">Together with <strong>BISIGCO</strong> (Bigkis Agri-Livelihood &amp; Growers Cooperative), we provide farmers, fisherfolk, and growers with access to markets, fair pricing, capacity-building, and dignified livelihood opportunities.</p>
<p style="font-size: 1.05rem; line-height: 1.75; color: #333;">From rice paddies in Luzon to upland farms in Mindanao, our members stand united &mdash; feeding the nation and uplifting their families.</p>
</div>
<div style="text-align: center;">
<img src="https://cdn.jsdelivr.net/gh/telemagnadon/publicforCDN@latest/assets/bigkis_bisigco.jpg" alt="Bigkis Inc and Bisigco — Unity in Action, Livelihood for All" style="width: 100%; max-width: 520px; border-radius: 20px; box-shadow: 0 20px 50px rgba(0,56,168,0.25);">
</div>
</div>
</div>
</section>
<section style="padding: 80px 20px; background: #fff;">
<div style="max-width: 1100px; margin: 0 auto;">
<div style="text-align: center; margin-bottom: 48px;">
<div style="display: inline-block; color: #0a8a3e; font-weight: 800; font-size: 0.9rem; letter-spacing: 0.15em; text-transform: uppercase; margin-bottom: 12px;">Our Programs</div>
<h2 style="font-size: 2.2rem; font-weight: 900; color: #0038a8; margin: 0;">What We Do for Our Members</h2>
</div>
<div style="display: grid; grid-template-columns: repeat(auto-fit, minmax(260px, 1fr)); gap: 24px;">
<div style="background: #fff; padding: 36px 28px; border-radius: 18px; box-shadow: 0 8px 30px rgba(0,56,168,0.08); border-top: 5px solid #0038a8;">
<div style="font-size: 2.8rem; margin-bottom: 14px;">🌾</div>
<h3 style="font-weight: 800; color: #0038a8; margin-bottom: 10px; font-size: 1.2rem;">Agri-Livelihood</h3>
<p style="color: #555; line-height: 1.65; margin: 0;">Farm inputs, training, and market access for rice, corn, vegetables, livestock, and high-value crops.</p>
</div>
<div style="background: #fff; padding: 36px 28px; border-radius: 18px; box-shadow: 0 8px 30px rgba(0,56,168,0.08); border-top: 5px solid #ce1126;">
<div style="font-size: 2.8rem; margin-bottom: 14px;">🤝</div>
<h3 style="font-weight: 800; color: #ce1126; margin-bottom: 10px; font-size: 1.2rem;">Bayanihan Network</h3>
<p style="color: #555; line-height: 1.65; margin: 0;">A nationwide grassroots network connecting members across barangays, municipalities, and provinces.</p>
</div>
<div style="background: #fff; padding: 36px 28px; border-radius: 18px; box-shadow: 0 8px 30px rgba(0,56,168,0.08); border-top: 5px solid #fcd116;">
<div style="font-size: 2.8rem; margin-bottom: 14px;">💰</div>
<h3 style="font-weight: 800; color: #b8860b; margin-bottom: 10px; font-size: 1.2rem;">Fair Trade Marketplace</h3>
<p style="color: #555; line-height: 1.65; margin: 0;">Direct-to-consumer selling that removes middlemen and ensures fair prices for growers.</p>
</div>
<div style="background: #fff; padding: 36px 28px; border-radius: 18px; box-shadow: 0 8px 30px rgba(0,56,168,0.08); border-top: 5px solid #0a8a3e;">
<div style="font-size: 2.8rem; margin-bottom: 14px;">📚</div>
<h3 style="font-weight: 800; color: #0a8a3e; margin-bottom: 10px; font-size: 1.2rem;">Capacity Building</h3>
<p style="color: #555; line-height: 1.65; margin: 0;">Skills training, financial literacy, and modern farming workshops for sustainable growth.</p>
</div>
<div style="background: #fff; padding: 36px 28px; border-radius: 18px; box-shadow: 0 8px 30px rgba(0,56,168,0.08); border-top: 5px solid #6f42c1;">
<div style="font-size: 2.8rem; margin-bottom: 14px;">🛡️</div>
<h3 style="font-weight: 800; color: #6f42c1; margin-bottom: 10px; font-size: 1.2rem;">Member Protection</h3>
<p style="color: #555; line-height: 1.65; margin: 0;">Cooperative insurance, mutual aid, and advocacy for farmers' rights at every level of government.</p>
</div>
<div style="background: #fff; padding: 36px 28px; border-radius: 18px; box-shadow: 0 8px 30px rgba(0,56,168,0.08); border-top: 5px solid #17a2b8;">
<div style="font-size: 2.8rem; margin-bottom: 14px;">🌏</div>
<h3 style="font-weight: 800; color: #17a2b8; margin-bottom: 10px; font-size: 1.2rem;">Global OFW Bridge</h3>
<p style="color: #555; line-height: 1.65; margin: 0;">Connecting overseas Filipinos with cooperative ventures back home &mdash; investment with impact.</p>
</div>
</div>
</div>
</section>
<section style="padding: 80px 20px; background: linear-gradient(135deg, #0038a8 0%, #0a4dbd 100%); color: #fff;">
<div style="max-width: 1000px; margin: 0 auto; text-align: center;">
<div style="font-size: 4rem; line-height: 1; opacity: 0.4; margin-bottom: -10px;">&ldquo;</div>
<p style="font-size: 1.5rem; font-weight: 600; line-height: 1.5; max-width: 800px; margin: 0 auto 28px; font-style: italic;">When Filipinos stand together &mdash; farmer beside farmer, neighbor beside neighbor &mdash; no challenge is too great. This is the spirit of <span style="color: #fcd116;">Bigkis</span>.</p>
<div style="width: 60px; height: 3px; background: #fcd116; margin: 0 auto 16px;"></div>
<div style="font-weight: 800; letter-spacing: 0.08em; text-transform: uppercase; font-size: 0.9rem; opacity: 0.9;">&mdash; The Bigkis Inc Movement</div>
</div>
</section>
<section style="padding: 80px 20px; background: #fcd116; text-align: center;">
<div style="max-width: 800px; margin: 0 auto;">
<h2 style="font-size: 2.4rem; font-weight: 900; color: #0038a8; margin-bottom: 14px;">Join the Movement</h2>
<p style="font-size: 1.15rem; color: #1a1a2e; margin-bottom: 32px; line-height: 1.6;">Become part of a million-strong cooperative reshaping Philippine agriculture &mdash; one bayanihan at a time.</p>
<div style="display: flex; gap: 14px; justify-content: center; flex-wrap: wrap;">
<a href="/login" style="display: inline-block; background: #0038a8; color: #fff; padding: 16px 44px; border-radius: 50px; font-weight: 800; text-decoration: none; font-size: 1.05rem; box-shadow: 0 8px 24px rgba(0,56,168,0.35);">Member Login / Sign Up</a>
<a href="/login" style="display: inline-block; background: #ce1126; color: #fff; padding: 16px 44px; border-radius: 50px; font-weight: 800; text-decoration: none; font-size: 1.05rem; box-shadow: 0 8px 24px rgba(206,17,38,0.35);">Apply for Membership</a>
</div>
</div>
</section>
<footer style="background: #1a1a2e; color: #b8c0d0; padding: 48px 20px 28px;">
<div style="max-width: 1100px; margin: 0 auto;">
<div style="display: grid; grid-template-columns: repeat(auto-fit, minmax(220px, 1fr)); gap: 32px; margin-bottom: 32px;">
<div>
<div style="display: flex; align-items: center; gap: 12px; margin-bottom: 14px;">
<div style="display: flex; gap: 8px;">
<img src="https://cdn.jsdelivr.net/gh/telemagnadon/publicforCDN@latest/assets/bigkis_logo.jpg" alt="Bigkis Inc" style="width: 56px; height: 56px; border-radius: 50%; background: #fff; padding: 4px;">
<img src="https://cdn.jsdelivr.net/gh/telemagnadon/publicforCDN@latest/assets/bisigco.png" alt="Bisigco" style="width: 56px; height: 56px; border-radius: 50%; background: #fff; padding: 4px;">
</div>
<div>
<div style="font-weight: 900; color: #fff; font-size: 1.05rem;">BIGKIS INC</div>
<div style="font-size: 0.78rem; letter-spacing: 0.1em; text-transform: uppercase; color: #fcd116;">Est. 2022</div>
</div>
</div>
<p style="font-size: 0.9rem; line-height: 1.6; margin: 0;">Bigkis Bayanihang Masa, Sincere Advocacy, Responsible Action Incorporated &mdash; a national agricultural cooperative serving Filipino farmers and communities.</p>
</div>
<div>
<div style="font-weight: 800; color: #fff; text-transform: uppercase; letter-spacing: 0.08em; font-size: 0.85rem; margin-bottom: 12px;">Cooperative</div>
<div style="display: flex; flex-direction: column; gap: 8px; font-size: 0.92rem;">
<a href="#about" style="color: #b8c0d0; text-decoration: none;">About Bigkis</a>
<a href="#" style="color: #b8c0d0; text-decoration: none;">BISIGCO Programs</a>
<a href="#" style="color: #b8c0d0; text-decoration: none;">Membership</a>
<a href="#" style="color: #b8c0d0; text-decoration: none;">Governance</a>
</div>
</div>
<div>
<div style="font-weight: 800; color: #fff; text-transform: uppercase; letter-spacing: 0.08em; font-size: 0.85rem; margin-bottom: 12px;">Connect</div>
<div style="display: flex; flex-direction: column; gap: 8px; font-size: 0.92rem;">
<span>📍 Republic of the Philippines</span>
<span>✉️ info@bigkis.ph</span>
<span>📞 Member Hotline</span>
</div>
</div>
</div>
<div style="border-top: 1px solid rgba(255,255,255,0.1); padding-top: 20px; text-align: center; font-size: 0.85rem;">
&copy; 2026 Bigkis Inc &amp; BISIGCO &mdash; Unity in Action. Livelihood for All. 🇵🇭
</div>
</div>
</footer>
HTML;
}
private function bigkisTemplateV2(): string
{
return <<<'HTML'
<div class="v2-landing">
<style>
@import url('https://fonts.googleapis.com/css2?family=Outfit:wght@300;400;600;800;900&display=swap');
.v2-landing {
font-family: 'Outfit', sans-serif;
color: #1e293b;
line-height: 1.6;
overflow-x: hidden;
background-color: #f8fafc;
}
.v2-landing * {
box-sizing: border-box;
}
.v2-hero {
position: relative;
padding: 160px 20px 200px;
background: #0f172a;
color: #fff;
text-align: center;
overflow: hidden;
}
.v2-hero::before {
content: '';
position: absolute;
top: -50%; left: -50%;
width: 200%; height: 200%;
background: radial-gradient(circle at 30% 30%, rgba(0,56,168,0.5) 0%, transparent 40%),
radial-gradient(circle at 70% 70%, rgba(206,17,38,0.4) 0%, transparent 40%);
animation: v2-rotateBg 25s linear infinite;
z-index: 0;
}
@keyframes v2-rotateBg {
0% { transform: rotate(0deg); }
100% { transform: rotate(360deg); }
}
.v2-hero-content {
position: relative;
z-index: 1;
max-width: 1000px;
margin: 0 auto;
display: flex;
flex-direction: column;
align-items: center;
gap: 32px;
}
.v2-glass-badge {
display: inline-flex;
align-items: center;
gap: 12px;
background: rgba(255, 255, 255, 0.1);
backdrop-filter: blur(12px);
-webkit-backdrop-filter: blur(12px);
border: 1px solid rgba(255, 255, 255, 0.2);
border-radius: 50px;
padding: 8px 24px;
font-weight: 600;
font-size: 0.9rem;
letter-spacing: 1px;
text-transform: uppercase;
color: #fcd116;
box-shadow: 0 4px 20px rgba(0,0,0,0.2);
}
.v2-logos {
display: flex;
justify-content: center;
align-items: center;
gap: 32px;
margin-bottom: 10px;
}
.v2-logo-wrap {
width: 140px;
height: 140px;
border-radius: 50%;
background: #fff;
padding: 6px;
box-shadow: 0 0 30px rgba(252,209,22,0.2);
transition: transform 0.5s cubic-bezier(0.175, 0.885, 0.32, 1.275), box-shadow 0.5s ease;
cursor: pointer;
}
.v2-logo-wrap:hover {
transform: translateY(-10px) scale(1.08);
box-shadow: 0 20px 40px rgba(252,209,22,0.5);
}
.v2-logo-wrap img {
width: 100%;
height: 100%;
object-fit: cover;
border-radius: 50%;
}
.v2-divider {
width: 3px;
height: 60px;
background: #fcd116;
border-radius: 4px;
box-shadow: 0 0 15px #fcd116;
}
.v2-title {
font-size: 5rem;
font-weight: 900;
line-height: 1.1;
margin: 0;
background: linear-gradient(135deg, #ffffff 0%, #cbd5e1 100%);
-webkit-background-clip: text;
-webkit-text-fill-color: transparent;
text-transform: uppercase;
letter-spacing: -2px;
text-shadow: 0 10px 30px rgba(0,0,0,0.3);
}
.v2-subtitle {
font-size: 1.6rem;
font-weight: 600;
color: #fcd116;
margin: 0;
letter-spacing: 2px;
}
.v2-desc {
font-size: 1.25rem;
color: #e2e8f0;
max-width: 750px;
font-weight: 300;
line-height: 1.8;
margin: 0;
}
.v2-actions {
display: flex;
gap: 20px;
flex-wrap: wrap;
justify-content: center;
margin-top: 16px;
}
.v2-btn-primary {
background: #fcd116;
color: #0038a8;
padding: 18px 48px;
border-radius: 50px;
font-size: 1.1rem;
font-weight: 800;
text-decoration: none;
transition: all 0.3s ease;
box-shadow: 0 10px 30px rgba(252,209,22,0.4);
text-transform: uppercase;
letter-spacing: 1px;
}
.v2-btn-primary:hover {
transform: translateY(-5px);
box-shadow: 0 15px 40px rgba(252,209,22,0.6);
background: #fff;
}
.v2-btn-secondary {
background: transparent;
color: #fff;
padding: 16px 46px;
border-radius: 50px;
font-size: 1.1rem;
font-weight: 800;
text-decoration: none;
transition: all 0.3s ease;
border: 2px solid rgba(255,255,255,0.3);
backdrop-filter: blur(10px);
text-transform: uppercase;
letter-spacing: 1px;
}
.v2-btn-secondary:hover {
background: rgba(255,255,255,0.15);
border-color: #fff;
transform: translateY(-5px);
}
.v2-stats {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(240px, 1fr));
gap: 30px;
max-width: 1200px;
margin: -100px auto 0;
padding: 0 20px;
position: relative;
z-index: 10;
}
.v2-stat-card {
background: #fff;
border-radius: 24px;
padding: 40px 20px;
text-align: center;
box-shadow: 0 20px 50px rgba(0,0,0,0.1);
transition: transform 0.4s ease, box-shadow 0.4s ease;
border-bottom: 6px solid #0038a8;
}
.v2-stat-card:hover {
transform: translateY(-15px);
box-shadow: 0 30px 60px rgba(0,0,0,0.15);
}
.v2-stat-val {
font-size: 3.5rem;
font-weight: 900;
color: #0038a8;
margin-bottom: 8px;
line-height: 1;
}
.v2-stat-label {
font-size: 1rem;
font-weight: 700;
color: #64748b;
text-transform: uppercase;
letter-spacing: 1.5px;
}
.v2-stat-card:nth-child(2) { border-color: #ce1126; }
.v2-stat-card:nth-child(2) .v2-stat-val { color: #ce1126; }
.v2-stat-card:nth-child(3) { border-color: #10b981; }
.v2-stat-card:nth-child(3) .v2-stat-val { color: #10b981; }
.v2-stat-card:nth-child(4) { border-color: #f59e0b; }
.v2-stat-card:nth-child(4) .v2-stat-val { color: #f59e0b; }
.v2-section {
padding: 120px 20px;
}
.v2-container {
max-width: 1200px;
margin: 0 auto;
}
.v2-header {
text-align: center;
margin-bottom: 70px;
}
.v2-tag {
display: inline-block;
padding: 10px 20px;
background: rgba(0,56,168,0.08);
color: #0038a8;
border-radius: 50px;
font-weight: 800;
font-size: 0.95rem;
text-transform: uppercase;
letter-spacing: 2px;
margin-bottom: 24px;
}
.v2-h2 {
font-size: 3.5rem;
font-weight: 900;
color: #0f172a;
margin: 0;
line-height: 1.2;
}
.v2-grid {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(320px, 1fr));
gap: 40px;
}
.v2-card {
background: #fff;
border-radius: 30px;
padding: 48px 40px;
box-shadow: 0 10px 30px rgba(0,0,0,0.04);
transition: all 0.5s cubic-bezier(0.175, 0.885, 0.32, 1.275);
position: relative;
z-index: 1;
overflow: hidden;
}
.v2-card::before {
content: '';
position: absolute;
top: 0; left: 0; width: 100%; height: 100%;
background: linear-gradient(135deg, rgba(0,56,168,0.05) 0%, transparent 100%);
z-index: -1;
opacity: 0;
transition: opacity 0.4s ease;
}
.v2-card:hover {
transform: translateY(-20px);
box-shadow: 0 30px 60px rgba(0,56,168,0.1);
}
.v2-card:hover::before {
opacity: 1;
}
.v2-icon {
width: 80px;
height: 80px;
background: #f8fafc;
border-radius: 24px;
display: flex;
align-items: center;
justify-content: center;
font-size: 2.5rem;
margin-bottom: 30px;
box-shadow: inset 0 2px 10px rgba(0,0,0,0.05);
transition: transform 0.4s ease;
}
.v2-card:hover .v2-icon {
transform: scale(1.1) rotate(5deg);
}
.v2-card-title {
font-size: 1.7rem;
font-weight: 800;
margin-bottom: 16px;
color: #0f172a;
}
.v2-card-desc {
color: #64748b;
font-size: 1.1rem;
line-height: 1.7;
margin: 0;
}
.v2-cta {
background: linear-gradient(135deg, #0038a8 0%, #1e3a8a 100%);
padding: 120px 20px;
text-align: center;
color: #fff;
position: relative;
border-radius: 40px;
margin: 0 20px 100px;
overflow: hidden;
}
.v2-cta::before {
content: '';
position: absolute;
top: 0; left: 0; right: 0; bottom: 0;
background: url('data:image/svg+xml;utf8,<svg width="60" height="60" viewBox="0 0 60 60" xmlns="http://www.w3.org/2000/svg"><circle cx="30" cy="30" r="20" stroke="rgba(255,255,255,0.05)" stroke-width="1.5" fill="none"/></svg>') 0 0 / 60px 60px;
}
.v2-cta-content {
position: relative;
z-index: 2;
max-width: 800px;
margin: 0 auto;
}
.v2-cta-title {
font-size: 3.5rem;
font-weight: 900;
margin-bottom: 24px;
}
.v2-cta-desc {
font-size: 1.3rem;
color: #bfdbfe;
margin-bottom: 40px;
line-height: 1.6;
}
@media (max-width: 768px) {
.v2-title { font-size: 3.2rem; }
.v2-subtitle { font-size: 1.2rem; }
.v2-hero { padding: 120px 20px 160px; }
.v2-h2 { font-size: 2.5rem; }
.v2-cta-title { font-size: 2.5rem; }
.v2-logos { flex-direction: column; gap: 20px; }
.v2-divider { width: 60px; height: 3px; }
}
</style>
<header class="v2-hero">
<div class="v2-hero-content">
<div class="v2-glass-badge">
<span style="font-size:1.2rem">🌟</span> Premium Design Interface
</div>
<div class="v2-logos">
<div class="v2-logo-wrap">
<img src="https://cdn.jsdelivr.net/gh/telemagnadon/publicforCDN@latest/assets/bigkis_logo.jpg" alt="Bigkis Inc">
</div>
<div class="v2-divider"></div>
<div class="v2-logo-wrap">
<img src="https://cdn.jsdelivr.net/gh/telemagnadon/publicforCDN@latest/assets/bisigco.png" alt="Bisigco">
</div>
</div>
<div>
<h1 class="v2-title">Bigkis <span style="opacity:0.5;font-weight:300;">|</span> Bisigco</h1>
<h2 class="v2-subtitle">Sincere Advocacy &middot; Responsible Action</h2>
</div>
<p class="v2-desc">
A revolutionary national agricultural cooperative uniting millions across the Philippines. We empower farmers, elevate communities, and build a sustainable future through genuine <strong>bayanihan</strong>.
</p>
<div class="v2-actions">
<a href="/login" class="v2-btn-primary">Get Started Now</a>
<a href="#explore" class="v2-btn-secondary">Explore Programs</a>
</div>
</div>
</header>
<section class="v2-stats">
<div class="v2-stat-card">
<div class="v2-stat-val">1M+</div>
<div class="v2-stat-label">Active Members</div>
</div>
<div class="v2-stat-card">
<div class="v2-stat-val">81</div>
<div class="v2-stat-label">Provinces Reached</div>
</div>
<div class="v2-stat-card">
<div class="v2-stat-val">100%</div>
<div class="v2-stat-label">Filipino-Led</div>
</div>
<div class="v2-stat-card">
<div class="v2-stat-val">2022</div>
<div class="v2-stat-label">Est. Year</div>
</div>
</section>
<section id="explore" class="v2-section" style="background: #fff;">
<div class="v2-container">
<div class="v2-header">
<div class="v2-tag">Impact & Programs</div>
<h2 class="v2-h2">Empowering Growth</h2>
</div>
<div class="v2-grid">
<div class="v2-card">
<div class="v2-icon" style="color: #0038a8;">🌾</div>
<h3 class="v2-card-title">Agri-Livelihood</h3>
<p class="v2-card-desc">State-of-the-art farm inputs, comprehensive training, and exclusive market access to elevate local agriculture.</p>
</div>
<div class="v2-card">
<div class="v2-icon" style="color: #ce1126;">🤝</div>
<h3 class="v2-card-title">Bayanihan Network</h3>
<p class="v2-card-desc">A highly connected grassroots infrastructure linking members from barangays to provincial hubs seamlessly.</p>
</div>
<div class="v2-card">
<div class="v2-icon" style="color: #f59e0b;">💰</div>
<h3 class="v2-card-title">Fair Trade Hub</h3>
<p class="v2-card-desc">An optimized direct-to-consumer marketplace eliminating middlemen to maximize grower profitability.</p>
</div>
<div class="v2-card">
<div class="v2-icon" style="color: #10b981;">📚</div>
<h3 class="v2-card-title">Capacity Mastery</h3>
<p class="v2-card-desc">Advanced skill acquisition, robust financial literacy, and modern agronomy workshops.</p>
</div>
<div class="v2-card">
<div class="v2-icon" style="color: #8b5cf6;">🛡️</div>
<h3 class="v2-card-title">Member Protection</h3>
<p class="v2-card-desc">Comprehensive cooperative insurance, mutual aid funds, and unwavering advocacy for farmers' rights.</p>
</div>
<div class="v2-card">
<div class="v2-icon" style="color: #0ea5e9;">🌏</div>
<h3 class="v2-card-title">Global OFW Bridge</h3>
<p class="v2-card-desc">Strategic investment channels for overseas Filipinos to fund and grow domestic cooperative ventures.</p>
</div>
</div>
</div>
</section>
<div class="v2-container">
<div class="v2-cta">
<div class="v2-cta-content">
<h2 class="v2-cta-title">Ready to Make an Impact?</h2>
<p class="v2-cta-desc">Join our million-strong movement. Transform agriculture, secure your livelihood, and uplift the nation with Bigkis and Bisigco.</p>
<a href="/login" class="v2-btn-primary" style="background: #fff; color: #0038a8; box-shadow: 0 10px 30px rgba(255,255,255,0.3);">Become a Member</a>
</div>
</div>
</div>
</div>
</section>
<footer>
&copy; 2026 Barangay System. All rights reserved.
</footer>
</body>
</html>
HTML;
}
}

View File

@@ -0,0 +1,94 @@
<?php
declare(strict_types=1);
use Hyperf\Database\Seeders\Seeder;
class RequestTypeSeeder extends Seeder
{
public function run(): void
{
$types = [
[
'name' => 'Barangay Clearance',
'code' => 'CLEARANCE',
'description' => 'General purpose barangay clearance for various applications.',
'base_fee' => 50.00,
'processing_days' => 1,
'is_active' => true,
'requires_clearance' => false,
],
[
'name' => 'Certificate of Residency',
'code' => 'RESIDENCY',
'description' => 'Proof of residency within the barangay.',
'base_fee' => 30.00,
'processing_days' => 1,
'is_active' => true,
'requires_clearance' => false,
],
[
'name' => 'Certificate of Indigency',
'code' => 'INDIGENCY',
'description' => 'Certification for indigent residents for government assistance.',
'base_fee' => 0.00,
'processing_days' => 1,
'is_active' => true,
'requires_clearance' => false,
],
[
'name' => 'Certificate of Good Moral Character',
'code' => 'GOOD_MORAL',
'description' => 'Character reference certificate from the barangay.',
'base_fee' => 50.00,
'processing_days' => 2,
'is_active' => true,
'requires_clearance' => false,
],
[
'name' => 'Business Clearance',
'code' => 'BUSINESS_CLEARANCE',
'description' => 'Barangay clearance for business registration and renewal.',
'base_fee' => 200.00,
'processing_days' => 3,
'is_active' => true,
'requires_clearance' => false,
],
[
'name' => 'Closure of Business',
'code' => 'BUSINESS_CLOSURE',
'description' => 'Certification for business closure.',
'base_fee' => 100.00,
'processing_days' => 3,
'is_active' => true,
'requires_clearance' => false,
],
[
'name' => 'Solo Parent ID',
'code' => 'SOLO_PARENT',
'description' => 'Certification for solo parent status.',
'base_fee' => 0.00,
'processing_days' => 2,
'is_active' => true,
'requires_clearance' => false,
],
[
'name' => 'Senior Citizen Assistance',
'code' => 'SENIOR_CITIZEN',
'description' => 'Certification for senior citizen benefits.',
'base_fee' => 0.00,
'processing_days' => 1,
'is_active' => true,
'requires_clearance' => false,
],
];
foreach ($types as $type) {
\Hyperf\DbConnection\Db::table('barangay_request_types')
->updateOrInsert(['code' => $type['code']], array_merge($type, [
'created_at' => now(),
'updated_at' => now(),
]));
}
}
}

View File

@@ -13,7 +13,7 @@ class SystemSettingSeeder extends \Hyperf\Database\Seeders\Seeder
// General Settings
[
'key' => 'app_name',
'value' => 'BukidBounty',
'value' => 'Barangay System',
'type' => 'text',
'group' => 'general',
'label' => 'Application Name',
@@ -21,7 +21,7 @@ class SystemSettingSeeder extends \Hyperf\Database\Seeders\Seeder
],
[
'key' => 'app_description',
'value' => 'Agricultural Management Platform & Marketplace ecosystem for modern farming communities.',
'value' => 'Barangay Management & Governance Platform',
'type' => 'text',
'group' => 'general',
'label' => 'Application Description',
@@ -29,7 +29,7 @@ class SystemSettingSeeder extends \Hyperf\Database\Seeders\Seeder
],
[
'key' => 'app_tagline',
'value' => 'Bounty of the Fields at Your Fingertips',
'value' => 'Serving our community, one document at a time.',
'type' => 'text',
'group' => 'general',
'label' => 'Tagline',
@@ -73,7 +73,7 @@ class SystemSettingSeeder extends \Hyperf\Database\Seeders\Seeder
// Advanced Settings
[
'key' => 'footer_text',
'value' => '&copy; 2026 BukidBounty Ecosystem. All rights reserved.',
'value' => '&copy; 2026 Barangay System. All rights reserved.',
'type' => 'text',
'group' => 'advanced',
'label' => 'Footer Text',
@@ -113,9 +113,9 @@ class SystemSettingSeeder extends \Hyperf\Database\Seeders\Seeder
],
[
'key' => 'app_mode',
'value' => 'corporate',
'value' => 'barangay',
'type' => 'select',
'options' => json_encode(['corporate', 'cooperative', 'ngo', 'tandem', 'others']),
'options' => json_encode(['barangay']),
'group' => 'general',
'label' => 'Application Mode',
'description' => 'Defines the operational mode of the platform, which affects available features and terminology.'
@@ -130,7 +130,7 @@ class SystemSettingSeeder extends \Hyperf\Database\Seeders\Seeder
],
[
'key' => 'chapter_positions',
'value' => json_encode(['National Director', 'Regional Director', 'Provincial Coordinator', 'City/Municipal Officer', 'Barangay Captain', 'Secretary', 'Treasurer', 'Auditor', 'Member']),
'value' => json_encode(['Punong Barangay', 'Kagawad', 'Secretary', 'Treasurer', 'SK Chairperson', 'SK Councilor', 'Tanod', 'BHW', 'Daycare Worker', 'Staff', 'Member']),
'type' => 'json',
'group' => 'general',
'label' => 'Chapter Positions',

View File

@@ -10,79 +10,63 @@ use Hypervel\Support\Str;
class UserSeeder extends Seeder
{
protected $users = [
[
'name' => 'Admin Ultima User',
'name' => 'System Administrator',
'mobile_number' => '777',
'nickname' => 'admin',
'username' => 'admin',
'email' => 'admin@example.com',
'password' => 'OmegaPsilon32!',
'acct_type' => 'ult',
'acct_type' => 'super_admin',
],
[
'name' => 'Super Op User',
'name' => 'Punong Barangay',
'mobile_number' => '09111111111',
'nickname' => 'superop',
'username' => 'test_super_op',
'nickname' => 'captain',
'username' => 'test_captain',
'password' => 'TetraOmega21!',
'acct_type' => 'super operator',
'acct_type' => 'punong_barangay',
],
[
'name' => 'Operator User',
'name' => 'Barangay Secretary',
'mobile_number' => '09222222222',
'nickname' => 'operator',
'username' => 'test_op',
'nickname' => 'secretary',
'username' => 'test_secretary',
'password' => 'HeliosAlpha21!',
'acct_type' => 'operator',
'acct_type' => 'secretary',
],
[
'name' => 'Coordinator User',
'name' => 'Barangay Treasurer',
'mobile_number' => '09333333333',
'nickname' => 'coordinator',
'username' => 'test_coord',
'nickname' => 'treasurer',
'username' => 'test_treasurer',
'password' => 'ParagonSigma51!',
'acct_type' => 'coordinator',
'acct_type' => 'treasurer',
],
[
'name' => 'Rider User',
'name' => 'Sample Kagawad',
'mobile_number' => '09444444444',
'nickname' => 'rider',
'username' => 'test_rider',
'nickname' => 'kagawad',
'username' => 'test_kagawad',
'password' => 'MilipedeAstra21!',
'acct_type' => 'rider',
'acct_type' => 'kagawad',
],
[
'name' => 'POS Terminal User',
'name' => 'Sample Resident',
'mobile_number' => '09555555555',
'nickname' => 'pos',
'username' => 'test_pos',
'password' => 'MedicusGamma21!',
'acct_type' => 'pos terminal',
],
[
'name' => 'Standard User',
'mobile_number' => '09666666666',
'nickname' => 'user',
'username' => 'test_user',
'nickname' => 'resident',
'username' => 'test_resident',
'password' => 'OrionDraconis21!',
'acct_type' => 'user',
'acct_type' => 'resident',
],
];
/**
* Run the database seeds.
*
* @return void
*/
public function run()
{
foreach ($this->users as $data) {
User::firstOrCreate(['mobile_number' => $data['mobile_number']], [
'name' => $data['name'],
// 'hashkey' => $data['hashkey'],
'nickname' => $data['nickname'] ?? null,
'username' => $data['username'] ?? null,
'email' => $data['email'] ?? null,
@@ -109,4 +93,3 @@ class UserSeeder extends Seeder
}
}
}