Skip to content

Latest commit

History

2 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

Work Management

A work management app for a 10-person team: a Home dashboard, a personal "My Tasks" inbox, per-project List/Board/Calendar views, a task detail panel with comments/likes/activity, and a Team directory.

Plain LAMP stack — PHP (PDO/MySQL, session-based login) on the backend, a dependency-free vanilla-JS single-page frontend on top. No Node/build step required; deployment is just copying files to a webroot and pointing Apache at public/.

Stack

  • PHP 8.x + PDO (pdo_mysql)
  • MySQL or MariaDB
  • Apache with mod_php (or php-fpm)
  • No frontend framework / no build step — public/assets/js/app.js is loaded directly by the browser.

1. Install packages (Ubuntu)

sudo apt update
sudo apt install -y apache2 php libapache2-mod-php php-mysql mysql-server
sudo a2enmod rewrite

2. Create the database

sudo mysql -u root <<'SQL'CREATE DATABASE project_manager CHARACTER SET utf8mb4;CREATE USER 'project_manager'@'localhost' IDENTIFIED BY 'CHANGE_ME';GRANT ALL PRIVILEGES ON project_manager.* TO 'project_manager'@'localhost';FLUSH PRIVILEGES;SQL
mysql -u project_manager -p project_manager < db/schema.sql
mysql -u project_manager -p project_manager < db/seed.sql # optional demo data

db/seed.sql seeds a placeholder 10-person team, 5 projects, and ~24 tasks so the app isn't empty on first load. Every seeded user's password is password123change these before going live, or skip the seed file entirely and create your own users (see step 5).

3. Configure the app

cp config/config.sample.php config/config.php

Edit config/config.php with your DB credentials (host/name/user/pass) and workspace name. config/config.php is gitignored — never commit real credentials.

4. Deploy the code

Copy the repo to somewhere Apache can serve, e.g. /var/www/project-manager, then point Apache's DocumentRoot at the public/ subdirectory (not the repo root — config/, includes/, and db/ must stay outside the webroot).

Example vhost (/etc/apache2/sites-available/project.senylrc.org.conf):

<VirtualHost*:80>
ServerName project.senylrc.org
DocumentRoot /var/www/project-manager/public
<Directory/var/www/project-manager/public>
AllowOverride All
Require all granted
</Directory>
ErrorLog ${APACHE_LOG_DIR}/project-manager-error.log
CustomLog ${APACHE_LOG_DIR}/project-manager-access.log combined
</VirtualHost>
sudo a2ensite project.senylrc.org
sudo systemctl reload apache2

Point the project.senylrc.org DNS record at this server, then set up TLS (e.g. sudo apt install certbot python3-certbot-apache && sudo certbot --apache -d project.senylrc.org).

5. Create your first real user

If you skipped db/seed.sql, create at least one user directly:

php -r 'echo password_hash("your-password", PASSWORD_DEFAULT), PHP_EOL;'
INSERT INTO users (name, email, password_hash, role, hue)
VALUES ('Your Name', 'you@example.com', '<hash from above>', 'Your Role', 280);

Then create at least one project (tasks always belong to a project):

INSERT INTO projects (name, hue) VALUES ('First Project', 250);

Project layout

config/ gitignored config.php (DB credentials) + a sample to copy
db/ schema.sql, seed.sql
includes/ PHP shared code (db connection, auth/session, JSON helpers)
public/ Apache DocumentRoot
index.php auth-gated app shell, embeds bootstrap JSON for the SPA
login.php login form + handler
api/ JSON endpoints (tasks.php, comments.php)
assets/ style.css + app.js (vanilla JS SPA, no build step)

Notes on scope

  • Single workspace, single MySQL database — sized for one ~10-person team, not multi-tenant.
  • All comments/activity for all tasks are embedded in the initial page load rather than paginated per task; fine at this team size, but would need pagination if task/comment volume grows significantly.
  • Task tags are read/display-only from the UI in this pass (seeded via SQL); there's no tag editor yet.

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages