Build an laravel app

Job ID: 37366897

Budget: €100 – €600 EUR

Hi, I'm looking for a freelancer to build an app using the Laravel framework. The app will be used for a small non-profit scuba diving organization.

I'm looking for a fixed price offer for the total app development. I have written some requirements below. Along the way me might have some small adjustments in the requirements, to please take that into consideration and budget. These adjustments might be like an extra field or something, not adding complete functionalities


General
--------------------------------------

- Latest laravel 10 should be used
- backpack for Laravel
- All code should be according to best practices and standards, and should be commented as much as possible
- The application should work well on Android/ios/Windows/mac in all mainstream browser
- The application should be responsive design
- The application should be translatable (and language must be choosable)

Communication
--------------------------------------

- A trello board shall be used for follow up
- I will provide a dev environment
- GIT should be used

Database
--------------------------------------

- Mysql preferred
- No records should be deleted, only soft delete


Auth/user management
--------------------------------------

- There should be a permission system to clearly define roles and permissions (based on https://github.com/Laravel-Backpack/PermissionManager)
- Assigning a role should give permissions to certain pages and functions, which should be configurable from the GUI
- A user can have multiple roles
- A users profile must have a some information records:


- - Firstname
- - Lastname
- - Address
- - Phone
- - E-mail
- - Birthdate (with age calculation
- - Register number


- Some info can be edited by the user itself, other should be edited by a user with an admin role
- A user should be able to change his own profile picture.
- Certain admin users should be able to login as another user to see what they see or perform actions on their behalf
- There should be some kind of 2FA system for certain users. This can be via a login code via mail or a approval link via mail
- A user can be enabled or disabled for login
- Logins and logouts should be logged
- Only admin role users should be able to add users
- Login details (or a password reset mail) should be manually mailed to the user

Location management
--------------------------------------

- You should be able to add/edit/delete (dive locations) which contain:

- - Name
- - Photo
- - Current (none/moderate/hard)
- - Depth
- - Link
- - Address
- - Notes

- The location detail screen should show all details + photo/google map + a button to organize an event
- An overview page should show all locations on a map



Dive event management
--------------------------------------

- Users with the correct role should be able to create an event
- A dive event should have these details:

- - Date (in the future)
- - Briefing time
- - Dive time
- - Dive location (selectable)
- - Organizer (person that added the dive)
- - Description

- Everyone should be able to view dives. Only certain users roles should be able to add dives.
- Once a dive is added, it should be possible to register users for the dive.
- A registration consists of:

- - Registered user
- - User that did the registration
- - Note

- The registration can be done by:

- - The user itself
- - Administrator
- - Person that created the dive

- On the user profile, in a tab, all registered dives should be shown.
- Once a dive is added, all users should receive an e-mail with a link that allows registering for the dive event, without login (magic link)


Qualification management
--------------------------------------

- Members can have multiple qualifications. A qualification has a qualification type, which also indicate it should expire or not.
- There should be a separate page to manage qualifications and qualification types
- Via users management I should be able to add 1 or more qualifications. A start date should be given. and when expires is true, an end date should be given.
- The qualification registration should be shown to all users.
- The qualification types are:

- - certification (no expiration)
- - depth (no expiration)
- - HVD (expiration)

So an example qualification registration would be:

- - user: 1
- - type: HVD
- - startdate: 28/10/2023
- - enddate: 28/10/2025
- - notes: none





Log system
--------------------------------------

- Every action that a user does should be logged, and viewable in a searchable log (based on https://github.com/Laravel-Backpack/activity-log)
- When any record is changed, the old and new values should be stored in the log
- A log entry should be viewable from the related object. For example, if a user updated a dive entry, it should be viewable from that dive in a separate tab

Notification system
--------------------------------------
- There should be some kind of notification system for certain events:

- - birthday
- - qualification expiry
- - certain records added
- - dive event added
- - …


- These notifications should be sent via:

- - In app
- - Browser notification
- - Email

- Text should be configurable for each event type
- It should with some kind of queue system
- Users should be able to turn notifications on or off (and how they want to receive it). However, certain notifications should only be sent to administrators (so a user should not be able to see it)
- Every user should be able to see a history of the events in the app. An administrator should also be able to see all notifications that was sent to an user (in a tab on the profile page).

Notes
--------------------------------------

- You should be able to add multiple notes to certain objects:

- - users
- - divelocations
- - dives
- - …

- You should be able to select who can view the notes (based on permission role). By default notes should only be shown to the same permission level and higher


EDIT: made some clarifications.
Related categories: PHP Laravel