tunecamp 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.env.local +2 -0
- package/.vercel/README.txt +11 -0
- package/.vercel/project.json +1 -0
- package/LICENSE +22 -0
- package/README.md +554 -0
- package/dist/cli.d.ts +6 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +172 -0
- package/dist/cli.js.map +1 -0
- package/dist/generator/embedGenerator.d.ts +38 -0
- package/dist/generator/embedGenerator.d.ts.map +1 -0
- package/dist/generator/embedGenerator.js +92 -0
- package/dist/generator/embedGenerator.js.map +1 -0
- package/dist/generator/feedGenerator.d.ts +50 -0
- package/dist/generator/feedGenerator.d.ts.map +1 -0
- package/dist/generator/feedGenerator.js +167 -0
- package/dist/generator/feedGenerator.js.map +1 -0
- package/dist/generator/podcastFeedGenerator.d.ts +54 -0
- package/dist/generator/podcastFeedGenerator.d.ts.map +1 -0
- package/dist/generator/podcastFeedGenerator.js +173 -0
- package/dist/generator/podcastFeedGenerator.js.map +1 -0
- package/dist/generator/proceduralCoverGenerator.d.ts +51 -0
- package/dist/generator/proceduralCoverGenerator.d.ts.map +1 -0
- package/dist/generator/proceduralCoverGenerator.js +228 -0
- package/dist/generator/proceduralCoverGenerator.js.map +1 -0
- package/dist/generator/siteGenerator.d.ts +55 -0
- package/dist/generator/siteGenerator.d.ts.map +1 -0
- package/dist/generator/siteGenerator.js +539 -0
- package/dist/generator/siteGenerator.js.map +1 -0
- package/dist/generator/templateEngine.d.ts +13 -0
- package/dist/generator/templateEngine.d.ts.map +1 -0
- package/dist/generator/templateEngine.js +146 -0
- package/dist/generator/templateEngine.js.map +1 -0
- package/dist/index.d.ts +12 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +32 -0
- package/dist/index.js.map +1 -0
- package/dist/parser/catalogParser.d.ts +13 -0
- package/dist/parser/catalogParser.d.ts.map +1 -0
- package/dist/parser/catalogParser.js +120 -0
- package/dist/parser/catalogParser.js.map +1 -0
- package/dist/tools/generate-codes.d.ts +14 -0
- package/dist/tools/generate-codes.d.ts.map +1 -0
- package/dist/tools/generate-codes.js +274 -0
- package/dist/tools/generate-codes.js.map +1 -0
- package/dist/tools/generate-sea-pair.d.ts +14 -0
- package/dist/tools/generate-sea-pair.d.ts.map +1 -0
- package/dist/tools/generate-sea-pair.js +111 -0
- package/dist/tools/generate-sea-pair.js.map +1 -0
- package/dist/types/index.d.ts +117 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +5 -0
- package/dist/types/index.js.map +1 -0
- package/dist/utils/audioUtils.d.ts +9 -0
- package/dist/utils/audioUtils.d.ts.map +1 -0
- package/dist/utils/audioUtils.js +67 -0
- package/dist/utils/audioUtils.js.map +1 -0
- package/dist/utils/configUtils.d.ts +11 -0
- package/dist/utils/configUtils.d.ts.map +1 -0
- package/dist/utils/configUtils.js +50 -0
- package/dist/utils/configUtils.js.map +1 -0
- package/dist/utils/fileUtils.d.ts +14 -0
- package/dist/utils/fileUtils.d.ts.map +1 -0
- package/dist/utils/fileUtils.js +73 -0
- package/dist/utils/fileUtils.js.map +1 -0
- package/examples/artist-free/README.md +36 -0
- package/examples/artist-paycurtain/README.md +49 -0
- package/examples/label/README.md +33 -0
- package/gundb-keypair.json +8 -0
- package/logo.svg +30 -0
- package/package-lock.json +1176 -0
- package/package.json +42 -0
- package/public/assets/community-registry.js +291 -0
- package/public/assets/download-stats.js +263 -0
- package/public/assets/player.js +219 -0
- package/public/assets/style.css +1170 -0
- package/public/assets/theme-widget.js +353 -0
- package/public/assets/unlock-codes.js +225 -0
- package/public/atom.xml +22 -0
- package/public/catalog.m3u +3 -0
- package/public/feed.xml +22 -0
- package/public/image.png +0 -0
- package/public/index.html +249 -0
- package/public/logo.svg +30 -0
- package/public/releases/chirichetto/Homologo - Chirichetto.wav +0 -0
- package/public/releases/chirichetto/cover.png +0 -0
- package/public/releases/chirichetto/embed-code.txt +16 -0
- package/public/releases/chirichetto/embed-compact.txt +8 -0
- package/public/releases/chirichetto/embed.html +39 -0
- package/public/releases/chirichetto/index.html +389 -0
- package/public/releases/chirichetto/playlist.m3u +3 -0
- package/templates/dark/assets/community-registry.js +291 -0
- package/templates/dark/assets/download-stats.js +263 -0
- package/templates/dark/assets/player.js +219 -0
- package/templates/dark/assets/style.css +740 -0
- package/templates/dark/index.hbs +73 -0
- package/templates/dark/layout.hbs +84 -0
- package/templates/dark/release.hbs +212 -0
- package/templates/default/assets/community-registry.js +291 -0
- package/templates/default/assets/download-stats.js +263 -0
- package/templates/default/assets/player.js +219 -0
- package/templates/default/assets/style.css +1170 -0
- package/templates/default/assets/theme-widget.js +353 -0
- package/templates/default/assets/unlock-codes.js +225 -0
- package/templates/default/index.hbs +188 -0
- package/templates/default/layout.hbs +117 -0
- package/templates/default/release.hbs +553 -0
- package/templates/minimal/assets/community-registry.js +291 -0
- package/templates/minimal/assets/download-stats.js +263 -0
- package/templates/minimal/assets/player.js +219 -0
- package/templates/minimal/assets/style.css +796 -0
- package/templates/minimal/index.hbs +73 -0
- package/templates/minimal/layout.hbs +84 -0
- package/templates/minimal/release.hbs +212 -0
- package/templates/retro/assets/community-registry.js +291 -0
- package/templates/retro/assets/download-stats.js +263 -0
- package/templates/retro/assets/player.js +219 -0
- package/templates/retro/assets/style.css +872 -0
- package/templates/retro/index.hbs +73 -0
- package/templates/retro/layout.hbs +84 -0
- package/templates/retro/release.hbs +212 -0
- package/templates/translucent/assets/community-registry.js +291 -0
- package/templates/translucent/assets/download-stats.js +263 -0
- package/templates/translucent/assets/player.js +219 -0
- package/templates/translucent/assets/style.css +1352 -0
- package/templates/translucent/index.hbs +73 -0
- package/templates/translucent/layout.hbs +84 -0
- package/templates/translucent/release.hbs +212 -0
- package/website/community.html +492 -0
- package/website/index.html +195 -0
- package/website/styles.css +396 -0
- package/website/tunecamp.svg +30 -0
|
@@ -0,0 +1,249 @@
|
|
|
1
|
+
<!DOCTYPE html>
|
|
2
|
+
<html lang="it" data-theme="dark">
|
|
3
|
+
|
|
4
|
+
<head>
|
|
5
|
+
<meta charset="UTF-8">
|
|
6
|
+
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
7
|
+
<title>Homologo</title>
|
|
8
|
+
<meta name="description" content="Faccio musica perché mi piace, punto. Non mi interessa metterla in scatole o darle etichette. A volte suona in un modo, a volte in un altro. Dipende da come mi sento quel giorno. Se vi va, date un'occhiata. Se vi piace, bene. Se no, nessun problema. Non prometto niente di speciale. È solo la mia roba, per quel che vale">
|
|
9
|
+
<!-- Tunecamp Metadata (for community registry) -->
|
|
10
|
+
<meta name="generator" content="Tunecamp 0.1.0">
|
|
11
|
+
<meta name="tunecamp-title" content="Homologo">
|
|
12
|
+
<meta name="tunecamp-artist" content="Homologo">
|
|
13
|
+
<!-- RSS/Atom Feeds -->
|
|
14
|
+
<link rel="alternate" type="application/rss+xml" title="Homologo RSS Feed" href="./feed.xml">
|
|
15
|
+
<link rel="alternate" type="application/atom+xml" title="Homologo Atom Feed" href="./atom.xml">
|
|
16
|
+
<link rel="stylesheet" href="https://fonts.googleapis.com/css2?family=Google+Sans:wght@400;500;600;700&display=swap">
|
|
17
|
+
<link rel="stylesheet" href="./assets/style.css">
|
|
18
|
+
<style>
|
|
19
|
+
:root {
|
|
20
|
+
--custom-font-family: 'Google Sans', -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', 'Oxygen', 'Ubuntu', 'Cantarell', sans-serif;
|
|
21
|
+
}
|
|
22
|
+
body {
|
|
23
|
+
font-family: var(--custom-font-family);
|
|
24
|
+
}
|
|
25
|
+
</style>
|
|
26
|
+
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.0/css/all.min.css">
|
|
27
|
+
<script>
|
|
28
|
+
// Initialize theme from localStorage or system preference
|
|
29
|
+
(function () {
|
|
30
|
+
const saved = localStorage.getItem('theme');
|
|
31
|
+
if (saved) {
|
|
32
|
+
document.documentElement.setAttribute('data-theme', saved);
|
|
33
|
+
} else if (window.matchMedia('(prefers-color-scheme: light)').matches) {
|
|
34
|
+
document.documentElement.setAttribute('data-theme', 'light');
|
|
35
|
+
}
|
|
36
|
+
})();
|
|
37
|
+
</script>
|
|
38
|
+
</head>
|
|
39
|
+
|
|
40
|
+
<body>
|
|
41
|
+
<header class="site-header">
|
|
42
|
+
<div class="container">
|
|
43
|
+
<div class="header-image-wrapper">
|
|
44
|
+
<div class="site-header-image">
|
|
45
|
+
<a href="./index.html">
|
|
46
|
+
<img src="./image.png" alt="Homologo" class="header-image">
|
|
47
|
+
</a>
|
|
48
|
+
</div>
|
|
49
|
+
</div>
|
|
50
|
+
</div>
|
|
51
|
+
</header>
|
|
52
|
+
|
|
53
|
+
<main class="site-main">
|
|
54
|
+
<div class="container">
|
|
55
|
+
<section class="artist-section">
|
|
56
|
+
<div class="artist-header">
|
|
57
|
+
<div class="artist-info">
|
|
58
|
+
<h2>Homologo</h2>
|
|
59
|
+
<p class="artist-bio">Faccio musica perché mi piace, punto. Non mi interessa metterla in scatole o darle etichette. A volte suona in un modo, a volte in un altro. Dipende da come mi sento quel giorno. Se vi va, date un'occhiata. Se vi piace, bene. Se no, nessun problema. Non prometto niente di speciale. È solo la mia roba, per quel che vale</p>
|
|
60
|
+
</div>
|
|
61
|
+
</div>
|
|
62
|
+
</section>
|
|
63
|
+
|
|
64
|
+
<section class="releases-section">
|
|
65
|
+
<h2>Releases</h2>
|
|
66
|
+
|
|
67
|
+
<!-- Search and Filter Controls -->
|
|
68
|
+
<div class="releases-controls">
|
|
69
|
+
<div class="search-box">
|
|
70
|
+
<i class="fas fa-search"></i>
|
|
71
|
+
<input type="text" id="searchInput" placeholder="Search releases..." autocomplete="off">
|
|
72
|
+
</div>
|
|
73
|
+
|
|
74
|
+
<div class="filter-controls">
|
|
75
|
+
<select id="genreFilter" class="filter-select">
|
|
76
|
+
<option value="">All Genres</option>
|
|
77
|
+
</select>
|
|
78
|
+
|
|
79
|
+
<select id="sortBy" class="filter-select">
|
|
80
|
+
<option value="date-desc">Newest First</option>
|
|
81
|
+
<option value="date-asc">Oldest First</option>
|
|
82
|
+
<option value="title-asc">Title A-Z</option>
|
|
83
|
+
<option value="title-desc">Title Z-A</option>
|
|
84
|
+
</select>
|
|
85
|
+
</div>
|
|
86
|
+
</div>
|
|
87
|
+
|
|
88
|
+
<div class="releases-grid" id="releasesGrid">
|
|
89
|
+
<article class="release-card"
|
|
90
|
+
data-title="Chirichetto"
|
|
91
|
+
data-date="2026-01-13"
|
|
92
|
+
data-genres="Electronic,Pop,Club"
|
|
93
|
+
data-description="Ci provo io con te ma non so se mi dirai di si!?">
|
|
94
|
+
<a href="./releases/chirichetto/index.html" class="release-link">
|
|
95
|
+
<div class="release-cover">
|
|
96
|
+
<img src="./releases/chirichetto/cover.png" alt="Chirichetto" loading="lazy">
|
|
97
|
+
</div>
|
|
98
|
+
|
|
99
|
+
<div class="release-info">
|
|
100
|
+
<h3 class="release-title">Chirichetto</h3>
|
|
101
|
+
<p class="release-date">January 13, 2026</p>
|
|
102
|
+
|
|
103
|
+
<div class="release-genres">
|
|
104
|
+
<span class="genre-tag">Electronic</span>
|
|
105
|
+
<span class="genre-tag">Pop</span>
|
|
106
|
+
<span class="genre-tag">Club</span>
|
|
107
|
+
</div>
|
|
108
|
+
|
|
109
|
+
<p class="release-tracks-count">
|
|
110
|
+
1 track
|
|
111
|
+
</p>
|
|
112
|
+
|
|
113
|
+
<div class="release-download-badge">
|
|
114
|
+
<i class="fas fa-download"></i> Free Download
|
|
115
|
+
</div>
|
|
116
|
+
</div>
|
|
117
|
+
</a>
|
|
118
|
+
</article>
|
|
119
|
+
</div>
|
|
120
|
+
|
|
121
|
+
<p class="no-results" id="noResults" style="display: none;">No releases match your search.</p>
|
|
122
|
+
</section>
|
|
123
|
+
</div>
|
|
124
|
+
|
|
125
|
+
<script>
|
|
126
|
+
document.addEventListener('DOMContentLoaded', function() {
|
|
127
|
+
const searchInput = document.getElementById('searchInput');
|
|
128
|
+
const genreFilter = document.getElementById('genreFilter');
|
|
129
|
+
const sortBy = document.getElementById('sortBy');
|
|
130
|
+
const releasesGrid = document.getElementById('releasesGrid');
|
|
131
|
+
const noResults = document.getElementById('noResults');
|
|
132
|
+
|
|
133
|
+
if (!releasesGrid) return;
|
|
134
|
+
|
|
135
|
+
const releaseCards = Array.from(releasesGrid.querySelectorAll('.release-card'));
|
|
136
|
+
|
|
137
|
+
// Populate genre filter
|
|
138
|
+
const allGenres = new Set();
|
|
139
|
+
releaseCards.forEach(card => {
|
|
140
|
+
const genres = card.dataset.genres;
|
|
141
|
+
if (genres) {
|
|
142
|
+
genres.split(',').forEach(g => allGenres.add(g.trim()));
|
|
143
|
+
}
|
|
144
|
+
});
|
|
145
|
+
|
|
146
|
+
Array.from(allGenres).sort().forEach(genre => {
|
|
147
|
+
const option = document.createElement('option');
|
|
148
|
+
option.value = genre;
|
|
149
|
+
option.textContent = genre;
|
|
150
|
+
genreFilter.appendChild(option);
|
|
151
|
+
});
|
|
152
|
+
|
|
153
|
+
function filterAndSort() {
|
|
154
|
+
const searchTerm = searchInput.value.toLowerCase();
|
|
155
|
+
const selectedGenre = genreFilter.value;
|
|
156
|
+
const sortValue = sortBy.value;
|
|
157
|
+
|
|
158
|
+
// Filter
|
|
159
|
+
let visibleCards = releaseCards.filter(card => {
|
|
160
|
+
const title = (card.dataset.title || '').toLowerCase();
|
|
161
|
+
const description = (card.dataset.description || '').toLowerCase();
|
|
162
|
+
const genres = card.dataset.genres || '';
|
|
163
|
+
|
|
164
|
+
const matchesSearch = !searchTerm ||
|
|
165
|
+
title.includes(searchTerm) ||
|
|
166
|
+
description.includes(searchTerm);
|
|
167
|
+
|
|
168
|
+
const matchesGenre = !selectedGenre ||
|
|
169
|
+
genres.split(',').map(g => g.trim()).includes(selectedGenre);
|
|
170
|
+
|
|
171
|
+
return matchesSearch && matchesGenre;
|
|
172
|
+
});
|
|
173
|
+
|
|
174
|
+
// Sort
|
|
175
|
+
visibleCards.sort((a, b) => {
|
|
176
|
+
switch (sortValue) {
|
|
177
|
+
case 'date-desc':
|
|
178
|
+
return new Date(b.dataset.date) - new Date(a.dataset.date);
|
|
179
|
+
case 'date-asc':
|
|
180
|
+
return new Date(a.dataset.date) - new Date(b.dataset.date);
|
|
181
|
+
case 'title-asc':
|
|
182
|
+
return (a.dataset.title || '').localeCompare(b.dataset.title || '');
|
|
183
|
+
case 'title-desc':
|
|
184
|
+
return (b.dataset.title || '').localeCompare(a.dataset.title || '');
|
|
185
|
+
default:
|
|
186
|
+
return 0;
|
|
187
|
+
}
|
|
188
|
+
});
|
|
189
|
+
|
|
190
|
+
// Apply visibility and order
|
|
191
|
+
releaseCards.forEach(card => {
|
|
192
|
+
card.style.display = 'none';
|
|
193
|
+
card.style.order = '';
|
|
194
|
+
});
|
|
195
|
+
|
|
196
|
+
visibleCards.forEach((card, index) => {
|
|
197
|
+
card.style.display = '';
|
|
198
|
+
card.style.order = index;
|
|
199
|
+
});
|
|
200
|
+
|
|
201
|
+
// Show/hide no results message
|
|
202
|
+
if (noResults) {
|
|
203
|
+
noResults.style.display = visibleCards.length === 0 ? 'block' : 'none';
|
|
204
|
+
}
|
|
205
|
+
}
|
|
206
|
+
|
|
207
|
+
searchInput.addEventListener('input', filterAndSort);
|
|
208
|
+
genreFilter.addEventListener('change', filterAndSort);
|
|
209
|
+
sortBy.addEventListener('change', filterAndSort);
|
|
210
|
+
});
|
|
211
|
+
</script>
|
|
212
|
+
|
|
213
|
+
|
|
214
|
+
</main>
|
|
215
|
+
|
|
216
|
+
<footer class="site-footer">
|
|
217
|
+
<div class="container">
|
|
218
|
+
<p>
|
|
219
|
+
© Homologo -
|
|
220
|
+
Powered by <a href="https://github.com/scobru/tunecamp" target="_blank">Tunecamp</a>
|
|
221
|
+
</p>
|
|
222
|
+
<div class="social-links">
|
|
223
|
+
<a href="https://homologomusic.vercel.app" target="_blank" rel="noopener" class="social-link">
|
|
224
|
+
<i class="fab fa-website"></i>
|
|
225
|
+
</a>
|
|
226
|
+
<a href="https://homologomusic.bandcamp.com" target="_blank" rel="noopener" class="social-link">
|
|
227
|
+
<i class="fab fa-bandcamp"></i>
|
|
228
|
+
</a>
|
|
229
|
+
<a href="https://open.spotify.com/intl-it/artist/10WDitiwNCQp8bHO4guJvj?si=HHCAAsZqTlKRVCpHl6tS4Q." target="_blank" rel="noopener" class="social-link">
|
|
230
|
+
<i class="fab fa-spotify"></i>
|
|
231
|
+
</a>
|
|
232
|
+
<a href="https://www.instagram.com/homologomusic" target="_blank" rel="noopener" class="social-link">
|
|
233
|
+
<i class="fab fa-instagram"></i>
|
|
234
|
+
</a>
|
|
235
|
+
</div>
|
|
236
|
+
</div>
|
|
237
|
+
</footer>
|
|
238
|
+
|
|
239
|
+
<script src="./assets/player.js"></script>
|
|
240
|
+
|
|
241
|
+
<!-- Interactive Theme Widget -->
|
|
242
|
+
<script src="./assets/theme-widget.js"></script>
|
|
243
|
+
|
|
244
|
+
<!-- Tunecamp Community Registry (auto-registers site) -->
|
|
245
|
+
<script src="https://cdn.jsdelivr.net/npm/gun/gun.js"></script>
|
|
246
|
+
<script src="./assets/community-registry.js"></script>
|
|
247
|
+
</body>
|
|
248
|
+
|
|
249
|
+
</html>
|
package/public/logo.svg
ADDED
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
<?xml version="1.0" encoding="UTF-8"?>
|
|
2
|
+
<svg height="400px" width="400px" version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"
|
|
3
|
+
viewBox="0 0 400 400" xml:space="preserve">
|
|
4
|
+
<circle style="fill:#2C3E50;" cx="200" cy="200" r="200"/>
|
|
5
|
+
<circle style="fill:#34495E;" cx="200" cy="200" r="180"/>
|
|
6
|
+
|
|
7
|
+
<!-- Simple tent shape -->
|
|
8
|
+
<path style="fill:#E67E22;" d="M200,80L120,200L280,200L200,80z"/>
|
|
9
|
+
<path style="fill:#D35400;" d="M200,80L120,200L200,200L200,80z"/>
|
|
10
|
+
|
|
11
|
+
<!-- Simple equalizer bars -->
|
|
12
|
+
<rect x="60" y="200" width="12" height="30" fill="#27AE60"/>
|
|
13
|
+
<rect x="80" y="190" width="12" height="40" fill="#27AE60"/>
|
|
14
|
+
<rect x="100" y="180" width="12" height="50" fill="#27AE60"/>
|
|
15
|
+
<rect x="120" y="170" width="12" height="60" fill="#27AE60"/>
|
|
16
|
+
<rect x="140" y="160" width="12" height="70" fill="#27AE60"/>
|
|
17
|
+
<rect x="160" y="150" width="12" height="80" fill="#27AE60"/>
|
|
18
|
+
<rect x="180" y="140" width="12" height="90" fill="#27AE60"/>
|
|
19
|
+
<rect x="200" y="130" width="12" height="100" fill="#27AE60"/>
|
|
20
|
+
<rect x="220" y="140" width="12" height="90" fill="#27AE60"/>
|
|
21
|
+
<rect x="240" y="150" width="12" height="80" fill="#27AE60"/>
|
|
22
|
+
<rect x="260" y="160" width="12" height="70" fill="#27AE60"/>
|
|
23
|
+
<rect x="280" y="170" width="12" height="60" fill="#27AE60"/>
|
|
24
|
+
<rect x="300" y="180" width="12" height="50" fill="#27AE60"/>
|
|
25
|
+
<rect x="320" y="190" width="12" height="40" fill="#27AE60"/>
|
|
26
|
+
<rect x="340" y="200" width="12" height="30" fill="#27AE60"/>
|
|
27
|
+
|
|
28
|
+
<!-- Simple treble clef -->
|
|
29
|
+
<path d="M80,120c0,0,8,15,8,30c0,15-8,30-8,30s8-15,8-30C88,135,80,120,80,120z" fill="#ECF0F1"/>
|
|
30
|
+
</svg>
|
|
Binary file
|
|
Binary file
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
<!-- Tunecamp Embed: Chirichetto -->
|
|
2
|
+
<div style="font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,sans-serif;max-width:400px;background:#1e293b;border-radius:12px;overflow:hidden;box-shadow:0 4px 20px rgba(0,0,0,0.3);">
|
|
3
|
+
<a href="https://homologomusic.vercel.app/releases/chirichetto/index.html" target="_blank" style="text-decoration:none;color:inherit;display:block;">
|
|
4
|
+
<img src="https://homologomusic.vercel.app/releases/chirichetto/cover.png" alt="Chirichetto" style="width:100%;display:block;aspect-ratio:1;object-fit:cover;">
|
|
5
|
+
<div style="padding:1rem;">
|
|
6
|
+
<div style="font-size:1.1rem;font-weight:600;color:#f1f5f9;margin-bottom:0.25rem;">Chirichetto</div>
|
|
7
|
+
<div style="font-size:0.9rem;color:#94a3b8;">Homologo</div>
|
|
8
|
+
<div style="font-size:0.8rem;color:#64748b;margin-top:0.5rem;">1 track</div>
|
|
9
|
+
</div>
|
|
10
|
+
</a>
|
|
11
|
+
<audio controls style="width:100%;height:40px;" preload="none"><source src="https://homologomusic.vercel.app/releases/chirichetto/Homologo - Chirichetto.wav" type="audio/mpeg">Your browser does not support audio.</audio>
|
|
12
|
+
<div style="padding:0.5rem 1rem;background:#0f172a;font-size:0.7rem;color:#64748b;text-align:right;">
|
|
13
|
+
Powered by <a href="https://github.com/scobru/tunecamp" target="_blank" style="color:#6366f1;text-decoration:none;">Tunecamp</a>
|
|
14
|
+
</div>
|
|
15
|
+
</div>
|
|
16
|
+
<!-- End Tunecamp Embed -->
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
<!-- Tunecamp Compact Embed -->
|
|
2
|
+
<a href="https://homologomusic.vercel.app/releases/chirichetto/index.html" target="_blank" style="display:inline-flex;align-items:center;gap:0.75rem;padding:0.5rem;background:#1e293b;border-radius:8px;text-decoration:none;font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,sans-serif;max-width:300px;">
|
|
3
|
+
<img src="https://homologomusic.vercel.app/releases/chirichetto/cover.png" alt="Chirichetto" style="width:48px;height:48px;border-radius:4px;object-fit:cover;">
|
|
4
|
+
<div style="min-width:0;">
|
|
5
|
+
<div style="font-size:0.9rem;font-weight:500;color:#f1f5f9;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;">Chirichetto</div>
|
|
6
|
+
<div style="font-size:0.75rem;color:#94a3b8;">Homologo</div>
|
|
7
|
+
</div>
|
|
8
|
+
</a>
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
<!DOCTYPE html>
|
|
2
|
+
<html>
|
|
3
|
+
<head>
|
|
4
|
+
<meta charset="UTF-8">
|
|
5
|
+
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
6
|
+
<title>Chirichetto - Embed</title>
|
|
7
|
+
<style>
|
|
8
|
+
* { margin: 0; padding: 0; box-sizing: border-box; }
|
|
9
|
+
body { font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif; background: #1e293b; }
|
|
10
|
+
.embed-container { max-width: 400px; margin: 0 auto; }
|
|
11
|
+
.cover { width: 100%; aspect-ratio: 1; object-fit: cover; display: block; }
|
|
12
|
+
.cover-placeholder { width: 100%; aspect-ratio: 1; background: linear-gradient(135deg, #6366f1, #8b5cf6); display: flex; align-items: center; justify-content: center; font-size: 4rem; color: rgba(255,255,255,0.3); }
|
|
13
|
+
.info { padding: 1rem; }
|
|
14
|
+
.title { font-size: 1.1rem; font-weight: 600; color: #f1f5f9; margin-bottom: 0.25rem; }
|
|
15
|
+
.artist { font-size: 0.9rem; color: #94a3b8; }
|
|
16
|
+
.tracks { font-size: 0.8rem; color: #64748b; margin-top: 0.5rem; }
|
|
17
|
+
audio { width: 100%; height: 40px; }
|
|
18
|
+
.footer { padding: 0.5rem 1rem; background: #0f172a; font-size: 0.7rem; color: #64748b; text-align: right; }
|
|
19
|
+
.footer a { color: #6366f1; text-decoration: none; }
|
|
20
|
+
.link { display: block; text-decoration: none; color: inherit; }
|
|
21
|
+
</style>
|
|
22
|
+
</head>
|
|
23
|
+
<body>
|
|
24
|
+
<div class="embed-container">
|
|
25
|
+
<a href="index.html" class="link" target="_top">
|
|
26
|
+
<img src="cover.png" alt="Chirichetto" class="cover">
|
|
27
|
+
<div class="info">
|
|
28
|
+
<div class="title">Chirichetto</div>
|
|
29
|
+
<div class="artist">Homologo</div>
|
|
30
|
+
<div class="tracks">1 track</div>
|
|
31
|
+
</div>
|
|
32
|
+
</a>
|
|
33
|
+
<audio controls preload="none"><source src="Homologo - Chirichetto.wav" type="audio/mpeg">Your browser does not support audio.</audio>
|
|
34
|
+
<div class="footer">
|
|
35
|
+
Powered by <a href="https://github.com/scobru/tunecamp" target="_blank">Tunecamp</a>
|
|
36
|
+
</div>
|
|
37
|
+
</div>
|
|
38
|
+
</body>
|
|
39
|
+
</html>
|