Skip to content

Commit f72281d

Browse files
committed
feat(cue-builder): add CUE file builder web application
- Implement timestamp-to-CUE conversion tool with separated HTML/CSS/JS structure - Support multiple formats (m:ss, h:mm:ss, ranges) and customizable metadata inputs - Apply Catppuccin Mocha styling with responsive layout and button action feedback - Include example inputs and update root README.md and AGENTS.md documentation tables
1 parent 287e428 commit f72281d

9 files changed

Lines changed: 664 additions & 1 deletion

File tree

AGENTS.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ Each subfolder is an independent project with its own `AGENTS.md` that describes
88

99
| Subproject | Description |
1010
|------------|-------------|
11+
| `cue-builder/` | CUE File Builder web application |
1112
| `tldr/` | Linux TLDR Commands single-page web application |
1213

1314
## Agent Instructions

README.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@ This is a repository for my vibecoding experiments. This project explores the ac
3030

3131
| Subproject | Description |
3232
|------------|-------------|
33+
| [`cue-builder/`](cue-builder/) | CUE File Builder web application |
3334
| [`tldr/`](tldr/) | Linux TLDR Commands single-page web application |
3435

3536
## Articles

cue-builder/AGENTS.md

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
# AGENTS.md
2+
3+
## Project: CUE File Builder
4+
5+
A web application that converts timestamp lists into valid CUE sheet files.
6+
7+
### File Structure Constraints
8+
- HTML, CSS, and JS must be in **separate files** (`index.html`, `style.css`, `script.js`).
9+
- Examples are stored in the `examples/` directory.
10+
11+
### Styling Constraints
12+
- Use **Catppuccin Mocha** color palette for all styling.
13+
- No mention of "Catppuccin Mocha" should appear in the page footer or visible UI text.
14+
15+
### Input Parsing Constraints
16+
- Must support **multiple timestamp formats**:
17+
- `m:ss` (e.g., `5:45`) — as seen in `examples/simple-example.txt`
18+
- `h:mm:ss` (e.g., `1:00:56`) — as seen in both examples
19+
- `start-end` range format (e.g., `0:00-5:37`) — as seen in `examples/range-example.txt` (only the start timestamp is used for the INDEX position)
20+
21+
### CUE Output Constraints
22+
- Generate valid CUE sheet format with MSF (Minutes:Seconds:Frames) timestamps.
23+
- MSF must use `:` as separator in `MM:SS:FF` format (e.g., `05:45:00`).
24+
- Frames are calculated at **75 frames per second** (1 frame = 1/75 of a second). Fractional seconds map to frames via `Math.round(fractionalSeconds * 75)`.
25+
- The CUE `FILE` line must only include the filename (with extension), **no file type keyword** appended (e.g., `FILE "audio.wav"` not `FILE "audio.wav" WAV`).
26+
- Each parsed line becomes a single TRACK entry.
27+
28+
### Metadata Input Constraints
29+
- User must be able to specify:
30+
- **PERFORMER** — text input, default "Unknown"
31+
- **TITLE** — text input, default "Mixed Album"
32+
- **DATE** — text input, defaults to current year
33+
- **FILE Name with Extension** — text input, default "audio.wav"
34+
- **No FILE Type selector** — file type is not specified separately; the filename includes the extension.
35+
36+
### UI/UX Constraints
37+
- Copy to Clipboard and Download buttons must provide **visual feedback** on action (text change + green flash, reverting after ~1.5 seconds).
38+
- Responsive layout: metadata section full-width, input/output panels side-by-side on desktop (768px+), stacked on mobile.
Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
0:00-5:37 Track One
2+
5:38-7:53 Track Two
3+
7:54-9:25 Track Three
4+
9:26-10:42 Track Four
5+
10:43-12:01 Track Five
6+
12:02-13:55 Track Six
7+
13:56-15:27 Track Seven
8+
15:28-17:10 Track Eight
9+
17:11-19:22 Track Nine
10+
19:23-20:16 Track Ten
11+
20:17-21:23 Track Eleven
12+
21:24-23:34 Track Twelve
13+
23:35-25:21 Track Thirteen
14+
25:22-28:57 Track Fourteen
15+
28:58-31:45 Track Fifteen
16+
31:45-34:26 Track Sixteen
17+
34:23-35:48 Track Seventeen
18+
35:42-37:00 Track Eighteen
19+
37:01-41:09 Track Nineteen
20+
41:10-45:20 Track Twenty
21+
45:21-49:36 Track Twenty-One
22+
45:37-54:10 Track Twenty-Two
23+
54:11-55:02 Track Twenty-Three
24+
55:03-59:03 Track Twenty-Four
25+
55:04-1:03:05 Track Twenty-Five
26+
1:03:06-1:03:43 Track Twenty-Six
27+
1:03:43-1:07:06 Track Twenty-Seven
28+
1:07:07-1:12:03 Track Twenty-Eight
29+
1:12:04-1:18:39 Track Twenty-Nine
30+
1:18:40-1:23:35 Track Thirty
31+
1:23:36-1:27:49 Track Thirty-One
32+
1:27:50-1:31:37 Track Thirty-Two
33+
1:31:38-1:35:30 Track Thirty-Three
34+
1:35:31-1:37:44 Track Thirty-Four
35+
1:37:44-1:38:25 Track Thirty-Five
36+
1:38:26-1:45:23 Track Thirty-Six
37+
1:45:24-1:50:14 Track Thirty-Seven
38+
1:50:15-1:51:18 Track Thirty-Eight
39+
1:51:19-1:52:35 Track Thirty-Nine
40+
1:52:35-1:56:20 Track Forty
41+
1:56:18-2:00:50 Track Forty-One
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
0:01 Track Alpha
2+
5:45 Track Beta
3+
10:56 Track Gamma
4+
14:36 Track Delta
5+
18:03 Track Epsilon
6+
20:51 Track Zeta
7+
24:03 Track Eta
8+
26:43 Track Theta
9+
30:37 Track Iota
10+
33:09 Track Kappa
11+
36:00 Track Lambda
12+
39:00 Track Mu
13+
42:25 Track Nu
14+
46:43 Track Xi
15+
49:06 Track Omicron
16+
52:50 Track Pi
17+
55:34 Track Rho
18+
1:00:56 Track Sigma
19+
1:03:32 Track Tau
20+
1:08:13 Track Upsilon
21+
1:12:50 Track Phi
22+
1:19:09 Track Chi
23+
1:24:05 Track Psi

cue-builder/index.html

Lines changed: 68 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,68 @@
1+
<!DOCTYPE html>
2+
<html lang="en">
3+
<head>
4+
<meta charset="UTF-8">
5+
<meta name="viewport" content="width=device-width, initial-scale=1.0">
6+
<title>CUE File Builder</title>
7+
<link rel="stylesheet" href="style.css">
8+
</head>
9+
<body>
10+
<div class="container">
11+
<header>
12+
<a href="../index.html" class="back-link">← Back to main page</a>
13+
<h1>CUE File Builder</h1>
14+
<p>Paste your timestamp list below and click Convert to generate a CUE sheet.</p>
15+
</header>
16+
17+
<main>
18+
<div class="metadata-section">
19+
<h2>CUE Metadata</h2>
20+
<div class="form-grid">
21+
<div class="form-group">
22+
<label for="performer-input">PERFORMER</label>
23+
<input type="text" id="performer-input" placeholder="Artist name" value="Unknown" />
24+
</div>
25+
<div class="form-group">
26+
<label for="title-input">TITLE</label>
27+
<input type="text" id="title-input" placeholder="Album title" value="Mixed Album" />
28+
</div>
29+
<div class="form-group">
30+
<label for="date-input">DATE</label>
31+
<input type="text" id="date-input" placeholder="Year" value="2026" />
32+
</div>
33+
<div class="form-group">
34+
<label for="filename-input">FILE Name with Extension</label>
35+
<input type="text" id="filename-input" placeholder="audio.wav" value="audio.wav" />
36+
</div>
37+
</div>
38+
</div>
39+
40+
<div class="editor-panels">
41+
<div class="input-section">
42+
<label for="input-textarea">Input Timestamps</label>
43+
<textarea id="input-textarea" placeholder="0:01 Track Title&#10;5:45 Another Track&#10;1:00:56 Hour Format Track"></textarea>
44+
<div class="button-row">
45+
<button id="convert-btn">Convert to CUE</button>
46+
<button id="clear-btn" class="secondary">Clear</button>
47+
</div>
48+
</div>
49+
50+
<div class="output-section">
51+
<label for="output-textarea">Generated CUE</label>
52+
<textarea id="output-textarea" readonly placeholder="Your CUE content will appear here..."></textarea>
53+
<div class="button-row">
54+
<button id="copy-btn" class="secondary" disabled>Copy to Clipboard</button>
55+
<button id="download-btn" class="secondary" disabled>Download .cue</button>
56+
</div>
57+
</div>
58+
</div>
59+
</main>
60+
61+
<footer>
62+
<p>CUE File Builder</p>
63+
</footer>
64+
</div>
65+
66+
<script src="script.js"></script>
67+
</body>
68+
</html>

0 commit comments

Comments
 (0)