Developer's Manual

Last Updated: 10 July 2026

Status: Living document

This document records the design, structure and development decisions behind the David White Music Archive website.

It is intended as a living document that evolves alongside the project, providing enough background for future development by David White or other contributors.

Project Philosophy

The purpose of the project is not simply to publish finished music. It is intended to become a living archive documenting the complete creative journey of a composer.

The archive contains completed works, works in progress, sketches, experiments, lyrics, artwork, notes and supporting material. It aims to support collaboration, encourage feedback and preserve the development of musical ideas.

Development Philosophy

Development follows a "slowly, slowly" approach. Changes are made in small, well-tested steps so that the website remains fully operational throughout development.

Whenever possible:

Observations on the Current Views

The different views in the archive have evolved from the way I compose, organise and collaborate, rather than from a fixed design plan. Each view reflects a different way of thinking about the collection.

By Reference

This was the original view and remains the one I use most while working.

Reference numbers usually (although not always) reflect the order in which pieces were started. They therefore provide a rough timeline of my creative work and closely match how projects are organised on my own computer.

For my own day-to-day work, this is often the most natural way to browse the archive.

By Title

This view was added primarily to support collaboration.

When discussing music with friends or other musicians, people naturally refer to pieces by their titles rather than their project reference numbers. Mary Hudson, for example, almost always thinks of a piece by its title.

This view makes it much easier for collaborators and visitors to find a particular work.

With Lyrics

This view exists because songwriting is often collaborative.

I sometimes ask people with strong lyric-writing skills to comment on, improve or collaborate on songs. Being able to display only pieces that contain lyrics makes it much easier to share this part of my work without asking someone to browse through the entire archive.

Recently Added

This view shows the most recently added entries in the database.

It does not necessarily show the newest compositions. Some works may have been written many years ago and only recently added to the archive. Its purpose is simply to highlight what has most recently become available on the website.

Each view presents the same archive from a different perspective. No single view is the "correct" view; together they support composing, organising, collaborating and exploring the collection in different ways.

Current Site Structure

davidwhiteuk.com

├── private/
│    └── db.php
│
└── htdocs/
     │
     ├── audio/
     │    ├── P353 V03 Say Nothing At All.m4a
     │    ├── P348 V05 Blues Fast Build Up.m4a
     │    ├── P363 V01 ...
     │    └── etc.
     │
     ├── css/
     │    └── styles.css
     │
     ├── images/
     │    ├── Ditrokid - Deer in the Woods 01.jpg
     │    └── banner.png
     │
     ├── includes/
     │    ├── config.php
     │    ├── functions.php
     │    ├── menu.php
     │    └── footer.php
     │
     ├── js/
     │    └── script.js
     │
     ├── feedback.php
     ├── index.php
     ├── music-list.php
     ├── search.php
     └── track.php

Current Database Structure

The website currently uses a small relational database centred around the audio_files table. Most other tables provide additional information about individual pieces of music.


audio_files
-----------

id              Primary Key
ref             Project reference (e.g. P353 V03)
title           Working or finished title
artwork         Image filename
filename        Audio filename
lyrics          Song lyrics (optional)
comments        Composer notes/comments
youtube         Embedded YouTube URL (optional)


composition_status
------------------

audio_file_id   → audio_files.id
status


genres
------

audio_file_id   → audio_files.id
genre


instruments
-----------

audio_file_id   → audio_files.id
instrument


feedback
--------

id              Primary Key
audio_file_id   → audio_files.id
track_title
name
email
message
created_at

Relationships

Each record in audio_files may have:

The audio_files table is therefore the central table around which the remainder of the archive is organised.

Design Notes

Genres, instruments and composition status are deliberately stored in separate tables rather than as comma-separated text. This allows each piece of music to have multiple values in each category and makes future searching and filtering much easier.

The database has intentionally been designed for future expansion. Additional tables (for artwork, sheet music, videos, collaborations, projects and other supporting material) can be added without requiring major changes to the existing structure.

Common Include Files

config.php

Loads the database connection from the private directory outside the public web root and automatically includes common functions used throughout the website.

functions.php

Contains reusable functions shared by multiple pages throughout the website. Keeping common functions in one file avoids duplication and simplifies maintenance.
Currently includes:

Additional common functions will be added here as the project develops.

menu.php

Provides the site navigation used by every page. Future development may introduce grouped drop-down menus.

footer.php

Provides common footer information including copyright notices and other site-wide information.

Current Features

Coding Standards

Future Development

Project Principle

Every improvement should make the website easier to understand, easier to maintain, and more useful to musicians, collaborators and listeners.

Development Log

2026-07-03
-----------
• Replaced three music-list pages with one configurable page.
• Added pagination (12 tracks per page).
• Added footer.php include.
• Moved database loading to config.php.
• Improved responsive YouTube embedding.
2026-07-04
-----------
• Created functions.php.
• Moved getMimeType() into functions.php.
• config.php now loads common functions.
• Added artwork support to track.php.
• Added artwork field to the database documentation.
• Developer's Manual now updates its own "Last Updated" date automatically.
• Added observations on the Current Views