Compare commits

..

No commits in common. "main" and "gancio-fix" have entirely different histories.

16 changed files with 630 additions and 572 deletions

View file

@ -1,28 +0,0 @@
---
title: "Isocyanates by eardiod"
date: 2025-10-03T13:59:59+00:00
draft: false
image:
url: "/2025/images/isocyanates.webp"
alt: "Abstract Image with geometric patterns, in red and orange tones"
license: "CC-BY-NC-ND 4.0"
credits:
name: "eardiod"
url: "https://eardiod.basspistol.com/isocyanates/"
cta:
url: https://eardiod.basspistol.com/isocyanates/
label: "Get this 💎"
release: true
catalogue: "#BPIST-029"
license: CC-BY-NC-ND 4.0
recordlabel: "Basspistol"
---
Straight from Mongolian bogs comes a smell and its not a faint whiff of morning freshness. Its a dense, stout aroma of a dump electro-organic sonic mischief.
Youre not [wroong](https://s.basspistol.org/@wroong), its [eardiod](https://nosotros.app/nprofile1qqsrfk4gzq49g8gac4f7psmfvtkhr758gjkxeasc7pk8vjshr35ekjgy7dg7m) himself with his pumping silly rhythms and lush, saturated crescendos which are able to induce synesthesia after just a few bars.
The skill he possesses leaps beyond obtainable right into undiscoverable. Who knows how he was able to land his short hands on this inhuman knowledge? But the phenomenal result of it being applied will not leave you unchanged.
With [Isocyanates](https://eardiod.basspistol.com/isocyanates/), eardiod proposes a 6 tracks EP of gritty techno. Organic and unexpected, most of eardiod's work is sequenced on the go, by hand on a setup mixing hardware boxes and software synthesizers.
Echoing from the remnants of Stockholm's underground scene, this release takes you on a trip to basement-raves, where lasers pierce the smoke.

View file

@ -1,22 +1,11 @@
--- ---
title: "Kybernetik LP by Revengeday" title: "Kybernetik LP by Revengeday"
date: 2025-06-29T23:59:59+02:00 date: 2025-06-29T20:48:32+02:00
draft: false draft: true
image: image: /images/kybernteik.webp
url: "/2025/images/kybernetik.webp" cta: https://shop.basspistol.com/bpist-023
alt: "A cartoon portrait in black and green of a woman looking upwards in the void. She has dark hair and bright eyes. Her make-up gives her a look that is very cyber. Bellow her the name of the artist and the title of the record separated by the record-label logos" catalogue: #BPIST-023
license: "CC-BY-NC-ND 4.0" license:
credits:
name: "Ramses Revengeday"
url: "https://revenge.day/"
cta:
url: https://shop.basspistol.com/bpist-023
label: "Get this 💎"
release: true
catalogue: "#BPIST-023"
license: CC-BY-NC-ND 4.0
recordlabel: "Basspistol & [OBEY THE SYSTEM](https://obeythesystem.com/) / [CORTEX IMPLANT](https://corteximplant.com/about)"
--- ---
In collaboration with the houses of [Cortex Implant](https://corteximplant.com/about) and [Obey The System](https://obeythesystem.com/), Basspistol is immensely proud to present Kybernetik LP by Revengeday.
The depth of the darkness and the attention to detail with which Revengeday manages to infuse his music is beyond written word. The work of a world builder, showing a glimpse of what 20 minutes in the future look like, but seen from 30 years ahead. Take a trip from Cairo to Berlin, via Tokyo and Chirak. In collaboration with the houses of Cortex Implant and Obey The System,

View file

@ -3,16 +3,8 @@ title: "{{ replace .Name "-" " " | title }}"
date: {{ .Date }} date: {{ .Date }}
draft: true draft: true
image: image:
url: ""
alt: ""
credits:
name: ""
url: ""
cta: cta:
url: catalogue:
label: "" license:
release: false
catalogue: ""
license: ""
recordlabel: ""
--- ---

View file

@ -117,71 +117,40 @@ footer {
flex-wrap: wrap; flex-wrap: wrap;
padding: 0; padding: 0;
font-size: .5em;
overflow-x: hidden; overflow-x: hidden;
} }
section { section {
padding: 10px;
display: flex;
flex-wrap: wrap;
padding: 16px;
} }
a { a {
color: white; color: orange;
} }
h1, h2, h3 { h1, h2, h3, h4, h5, h6, h7, h8 {
font-family: Outward, Space-Grotesk, 'Arial', 'Helvetica', sans-serif; font-family: Outward, Space-Grotesk, 'Arial', 'Helvetica', sans-serif;
} }
h1 {
h2 { font-family: Outward, 'Arial', 'Helvetica', sans-serif;
font-size: 10em; font-size: 48em;
font-weight: 100;
font-style: italic;
/* letter-spacing: -0.1em;*/
line-height: .75em;
rotate: -14deg;
margin: 50px 0 0 10px;
padding: 0;
text-align: center;
} }
h4 {
text-transform: uppercase;
font-size: 1em;
}
p {
font-size: .75em;
}
strong, b { strong, b {
font-weight: bold; font-weight: bold;
color: white;
} }
article {
margin: 2px 2px;
flex: 1 1 300px;
}
figcaption > h4 {
font-size: .75em;
}
figcaption > p {
font-size: .5em;
}
time {
color: white;
font-size: .5em;
}
.news > h4 {
font-size: .75em;
}
.news > p {
font-size: .5em;
}
.section-headers { .section-headers {
margin: 2px;
border-radius: 100px; border-radius: 100px;
padding: 80px 20px; padding: 80px 20px;
border-style: double; border-style: double;
@ -193,14 +162,6 @@ time {
background-position: center center; background-position: center center;
background-repeat: no-repeat; background-repeat: no-repeat;
h2, h4, p {
margin: 20px 0;
flex: 1 1 100%;
}
p {
max-width: 50%;
}
} }
.section-footers { .section-footers {
@ -210,13 +171,14 @@ time {
border-width: 10px; border-width: 10px;
flex: 1 1 100% !important; flex: 1 1 100% !important;
border-radius: 0 0 100px 100px; border-radius: 0 0 100px 100px;
margin: 2px;
} }
.border { .border {
border-style: double; border-style: double;
border-color: purple; border-color: purple;
border-width: 10px; border-width: 10px;
margin: 4px 0 4px 0;
flex: 1 1 300px; flex: 1 1 300px;
padding: 80px 20px; padding: 80px 20px;
} }
@ -227,7 +189,15 @@ time {
line-height: 5em; line-height: 5em;
border-radius: 300px; border-radius: 300px;
text-decoration: none; text-decoration: none;
text-transform: uppercase; }
/* Screen size root */
@media screen and (max-width: 1024px) {
h1 {
font-size: 12em;
}
} }
/* Sections Begin */ /* Sections Begin */
@ -257,276 +227,36 @@ time {
font-family: inherit; font-family: inherit;
} }
} }
#hero:hover {
/* NOW */ transition: all 2s linear;
#now {
.now {
display: flex;
flex-wrap: wrap;
flex: 1 1 100%;
background-position: center center;
background-size: cover;
margin: 2px;
}
.support {
display: flex;
flex-wrap: wrap;
justify-content: space-between;
h4, p {
flex: 1 1 100%;
}
p {
font-size: .75em;
}
img {
margin: 20px 0;
}
}
figure, div {
flex: 1 1 300px;
}
figure {
margin-right: 20px;
}
figure > img {
margin-bottom: 20px;
}
}
/* NEWSLETTER */
.inf-form > div {
background-color: black;
padding: 0;
}
.inf-form > div > h4 {
color: orange !important;
font-size: 1.5em;
}
.inf-form > div > span {
color: orange;
font-size: 1em;
}
.inf-rgpd {
font-size: .5em;
color: orange;
}
.inf-form > div {
background-color: black;
padding: 0;
}
.inf-input > input {
color: orange;
background-color: black;
border: 1px solid orange;
} }
/* DISCOGRAPHY and GANCIO */
#discog, #gancio {
display: flex; /* End Sections */
flex-wrap: wrap;
justify-content: space-between; /* FORMS */
#newsletter {
background-color: #000;
padding: 0;
margin: 0;
a { form.inf-form > div {
text-decoration: none; background-color: #000;
}
.section-headers {
margin: 2px 2px;
}
article {
margin: 2px;
}
figure {
padding: 4px;
margin: auto;
border-style: double;
border-color: purple;
border-width: 10px;
img {
width: 100%;
object-fit: cover;
height: 200px;
}
}
figcaption {
height: 300px;
padding: 20px;
z-index: 100;
overflow-y: hidden;
}
}
/* RADIO */
#radio {
.radioplayer {
display: flex;
flex-wrap: wrap;
justify-content: space-between;
}
#recordPlayer {
flex: 1 1 300px;
background-size: cover;
background-position: center center;
margin-top:40px;
img {
border-radius:7px;
transition: all linear 1s;
width: 100%;
height: auto;
object-fit: cover;
max-width: 600px;
max-height: 600px;
}
}
.legend-container {
align-content: center;
display: flex;
flex-wrap: wrap;
flex: 1 1 300px;
}
.spinner {
border-radius: 2000px !important;
animation: rotate 10s linear infinite;
border-style: double;
border-color: purple;
border-width: 10px;
}
.stop {
animation-play-state: paused;
}
.legend {
width: 100%;
}
.border {
margin: 2px;
}
audio {
width: 100%;
}
#myBtn {
background: transparent;
border: none;
padding: 0;
margin: 0;
font-size: 3em;
}
}
@media screen and (max-width: 720px) {
footer {
font-size: .9em;
}
h2 {
font-size: 8em;
}
h4 {
font-size: 1.25
}
p {
font-size: 1em;
max-width: unset !important;
strong {
font-size: 1.5em;
}
}
figcaption > h4 {
font-size: 1em;
}
figcaption > p {
font-size: .75em;
}
time {
color: white;
font-size: .75em;
}
.news > h4 {
font-size: 1em;
}
.news > p {
font-size: .75em;
}
.inf-rgpd {
font-size: .8em;
}
#now {
figure {
margin-right: 0px;
margin-bottom: 20px;
}
.support {
h4 {
font-size: 1em;
}
p {
font-size: .75em;
}
}
}
#radio {
#myBtn {
font-size: 4em;
}
} }
} }
.inf-content {
/* ANIMATIONS */ background-color: #000;
@keyframes rotate {
0% {
transform: rotate(0deg)
}
100% {
transform: rotate(360deg)
}
} }
.inf-input .inf-input-text {}
.inf-rgpd {}
.inf-submit {}

View file

@ -1,18 +1,104 @@
<style>
/* Discographys */
#discog {
display: flex;
flex-wrap: wrap;
justify-content: space-between;
a {
text-decoration: none;
}
article {
margin:2px;
flex: 1 1 300px;
}
h2 {
font-size: 12em;
/* text-transform: uppercase;*/
line-height: 1em;
flex: 1 1 100%;
}
p {
flex: 1 1 100%;
font-size: .6em;
line-height: 1.75em;
max-width: 33vw;
strong {
font-size: 1.25em;
}
}
@media screen and (max-width: 1024px) {
h2 {
font-size: 8em;
}
p {
font-size: .9em;
max-width: unset;
}
strong {
font-size: 1.5em;
}
}
figure {
padding: 4px;
margin: auto;
border-style: double;
border-color: purple;
border-width: 10px;
img {
width: 100%;
object-fit: cover;
max-height: 300px;
}
}
figcaption {
font-family: Sigoil, 'Arial', 'Helvetica', sans-serif;
background-color: black;
color: white;
height: 286px;
padding: 20px;
margin-bottom: 4px;
border-color: purple;
border-width: 10px;
color: orange;
z-index: 100;
position: relative;
text-decoration: none;
line-height: 1.25em;
overflow-y: hidden;
}
}
</style>
{{ $data := dict }} {{ $data := dict }}
{{ $url := "https://shop.basspistol.com/podcast.rss" }} {{ $url := "https://shop.basspistol.com/podcast.rss" }}
<section id="discog"> <section id="discog">
<div class="section-headers" style="background-image: url(/2025/images/vinyl.webp);"> <article class="section-headers" style="background-image: url(/2025/images/vinyl.webp);">
<h2>Discography</h2> <h2>Discography</h2>
<h4>𝕿𝖍𝖊 𝕾𝖔𝖚𝖓𝖉 𝖔𝖋 𝕱𝖗𝖊𝖊𝖉𝖔𝖒</h4> <p><strong>The sound of freedom</strong><br />
<p>Basspistol's discography is a non-possessive aggregation of cuts recoreded by independent musicians. Getting your music from here implies 100% of your support being channeled straight to the artist. (Minus whatever fees charged by the monetization service they leverage.) Basspistol's discography is a non-possessive aggregation of cuts recoreded by independent musicians. Getting your music from here implies 100% of your support being channeled straight to the artist. (Minus whatever fees charged by the monetization service they leverage.)
</p> <br /><br />
<p>The bellow selection is shuffled every 30 minutes. Is anything picking your curiosity? The random gods may just have something to tell you... Check out the Tienda for more.</p> The bellow selection is shuffled every 30 minutes. Anything pikcing your curiosity? The random gods may just have something to tell you...
<br /><br />
<a href="https://shop.basspistol.com" style="text-decoration: underline;">Check out the Tienda for more information</a>
</p> </p>
<a class="button" href="https://shop.basspistol.com">𝕭𝖆𝖘𝖘𝖕𝖎𝖘𝖙𝖔𝖑 𝕿𝖎𝖊𝖓𝖉𝖆 🛖</a> <a class="button" href="https://shop.basspistol.com">𝕭𝖆𝖘𝖘𝖕𝖎𝖘𝖙𝖔𝖑 𝕿𝖎𝖊𝖓𝖉𝖆 🛖</a>
</div> </article>
{{ with try (resources.GetRemote $url) }} {{ with try (resources.GetRemote $url) }}
@ -27,7 +113,7 @@
{{ with $data.channel.item }} {{ with $data.channel.item }}
{{ range . | shuffle | first 4 }} {{ range . | shuffle | first 5 }}
<article> <article>
<a href="{{ .link }}" target="_blank"> <a href="{{ .link }}" target="_blank">
@ -37,7 +123,8 @@
<img src="{{ . }}" /> <img src="{{ . }}" />
{{ end }} {{ end }}
<figcaption> <figcaption>
<h4>{{ .title | safeHTML }}</h4> <p><strong>{{ .title }}</strong></p>
<p>&nbsp;</p>
<p>{{ .description | transform.Plainify | safeHTML | truncate 120 }}</p> <p>{{ .description | transform.Plainify | safeHTML | truncate 120 }}</p>
</figcaption> </figcaption>

View file

@ -1,13 +1,120 @@
<style>
#gancio {
display: flex;
flex-wrap: wrap;
justify-content: space-between;
a {
}
article {
margin:2px;
flex: 1 1 300px;
}
h2 {
font-size: 12em;
/* text-transform: uppercase;*/
line-height: 1em;
flex: 1 1 100%;
}
p {
flex: 1 1 100%;
font-size: .6em;
line-height: 1.75em;
max-width: 33vw;
strong {
font-size: 1.25em;
}
}
@media screen and (max-width: 1024px) {
h2 {
font-size: 8em;
}
p {
font-size: .9em;
max-width: unset;
}
strong {
font-size: 1.5em;
}
}
figure {
padding: 4px;
margin: auto;
border-style: double;
border-color: purple;
border-width: 10px;
img {
width: 100%;
object-fit: cover;
border-style: double;
border-color: purple;
border-width: 10px;
max-height: 300px;
}
}
figcaption {
font-family: Outward, 'Arial', 'Helvetica', sans-serif;
font-size: 9em;
line-height: 0.3em;
font-weight: bold;
/* font-style: italic;*/
background-color: black;
color: white;
padding: 20px;
text-align: center;
border-style: double;
border-color: purple;
border-width: 10px;
color: orange;
z-index: 100;
position: relative;
text-decoration: none;
margin-bottom: 4px;
text-transform: lowercase;
}
@media screen and (max-width: 1024px) {
figcaption {
font-size: 7em;
line-height: 0.35em;
}
}
#gancioEvents.svelte-1ap5437 {
font-family: inherit !important;
}
}
</style>
<section id="gancio"> <section id="gancio">
<div class="section-headers"> <article class="section-headers">
<h2>Agenda</h2> <h2>Agenda</h2>
<h4>𝕺𝖚𝖙𝖊𝖗𝖓𝖆𝖙𝖎𝖔𝖓𝖆𝖑 𝕰𝖛𝖊𝖓𝖙𝖘</h4> <p><strong>Outnernational events</strong> <br />
<p>Through the power of federation, we aggregate event data from the deep-web to keep you in the loop of what's happening below the radars.</p> Through the power of federation, we aggregate event data from the deep-web to keep you in the loop of what's happening below the radars.
<p>Want your event featured here? <a href="https://do.basspistol.org/add" target="_blank" style="text-decoration: underline;">Head over to this page</a>. No account required.</p> <br /><br />
<a class="button" href="https://do.basspistol.org/">Full agenda 🗓️</a> Want your event featured here? <a href="https://do.basspistol.org/add" target="_blank">Head over to this page</a>. No account required.</p>
</article>
<div >
<script src="https://do.basspistol.org/gancio-events.es.js"></script>
<gancio-events baseurl="https://do.basspistol.org" collection="Music" show_recurrent="true" maxlength=7 sidebar="false" theme="dark"></gancio-events>
</div> </div>
{{ $data := dict }} {{ $data := dict }}
{{ $url := "https://do.basspistol.org/api/events" }} {{ $url := "https://do.basspistol.org/api/events" }}
{{ with try (resources.GetRemote $url) }} {{ with try (resources.GetRemote $url) }}
@ -21,29 +128,23 @@
{{ end }} {{ end }}
{{ with $data }} {{ with $data }}
{{ range . | first 4 }} {{ range . | first 7 }}
{{ .start_datetime | int | dateFormat "2006-01-02 15:04 CET" }}<br />
<article> {{ .title }}<br />
@{{ .place.name }}<br />
<figure> {{ .place.address }}<br />
<a href="https://do.basspistol.org/event/{{ .slug }}" target="_blank">{{ range .media }}<img src="https://do.basspistol.org/media/thumb/{{ .url }}" />{{ end }}</a> {{ range .tags }}
<figcaption> #{{ . }}
<h4>{{ .title }}</h4>
<time datetime="{{ .start_datetime | int | dateFormat "2006-01-02T15:04" }}">{{ .start_datetime | int | dateFormat "2006-01-02 15:04 UTC" }}</time>
<p><b>Venue:</b> {{ .place.name }}</p>
<p><b>Address: </b>{{ .place.address }}</p>
<!-- <p>{{ range .tags }}#{{ . }} {{ end }}</p>-->
</figcaption>
</figure>
</article>
{{ end }}<br />
{{ range .media }}
<img src="https://do.basspistol.org/media/thumb/{{ .url }}" />
{{ end }}
<br /><br />
{{ end }} {{ end }}
<!-- <pre>{{ debug.Dump $data }}</pre>--> <pre>{{ debug.Dump $data }}</pre>
{{ end }} {{ end }}
<div class="section-footers"></div> <article class="section-footers"></article>
</section> </section>

View file

@ -84,13 +84,13 @@
</style> </style>
<section id="gang"> <section id="gang">
<div class="section-headers"> <article class="section-headers">
<h2>Gung</h2> <h2>Gung</h2>
<h4>𝕷𝖎𝖓𝖐 𝕽𝖔𝖔𝖙</h4> <p><strong>Link Root</strong>
<p>The Basspistol network is composed of Powerful Syndicated Artists and Groups. These links are presented to you, ordered by the random god. </p><p>Follow the white Rabbit, Neo!</p> </br>
The Basspistol network is composed of Powerful Syndicated Artists and Groups. These links are presented to you, ordered by the random god. <br />Follow the white Rabbit, Neo!
<a class="button" href="https://matrix.to/#/#hq:basspistol.org">Come say Hi! 🐇</a> </p>
</div> </article>
{{/* prebuild/layouts/index.html */}} {{/* prebuild/layouts/index.html */}}
{{ $url := "https://s.basspistol.org/api/pinned-users" }} {{ $url := "https://s.basspistol.org/api/pinned-users" }}
@ -114,7 +114,10 @@
<img src="{{ .avatarUrl }}" /> <img src="{{ .avatarUrl }}" />
<figcaption> <figcaption>
<h4>{{ .username }}</h4> <p><strong>{{ .username }}</strong>
<br />
</p>
</figcaption> </figcaption>
</figure> </figure>
</a> </a>

View file

@ -1,48 +1,95 @@
<style>
/* Discographys */
#now {
display: flex;
flex-wrap: wrap;
flex-direction: row;
article {
flex: 1 1 300px;
}
h2 {
font-size: 12em;
/* text-transform: uppercase;*/
line-height: 1em;
flex: 1 1 100%;
}
p {
flex: 1 1 100%;
font-size: .6em;
line-height: 1.75em;
max-width: 33vw;
strong {
font-size: 1.25em;
}
}
div.now > figure {
padding: 0 20px 0 0;
}
@media screen and (max-width: 1024px) {
h2 {
font-size: 8em;
}
p {
font-size: .9em;
max-width: unset;
}
strong {
font-size: 1.5em;
}
div.now > figure, div.now > div {
padding: 20px 0;
}
}
.now {
flex: 1 1 300px;
}
}
.inf-rgpd {
font-size: .5em;
}
.inf-success > h4 {
font-family: Sigoil,Space-Grotesk,arial,helvetica,sans-serif;
}
</style>
<section id="now"> <section id="now">
<div class="section-headers" style="background-image: url(/2025/images/now-banner.svg);"> <article class="section-headers" style="background-image: url(/2025/images/now-banner.svg);">
<h2>NOW</h2> <h2>NOW</h2>
<h4>𝖂𝖊𝖑𝖈𝖔𝖒𝖊, 𝖘𝖕𝖆𝖈𝖊-𝖙𝖎𝖒𝖊 𝖙𝖗𝖆𝖛𝖊𝖑𝖊𝖗</h4> <p><strong>What's up, fellow space-time traveler! <br />Here's what's going down right now!</strong><br />Never been here before? <a href="https://www.basspistol.com/index2024.html#read">This page</a> might answer some of your questions. </p>
<p>Here's what's going down! Never been here before? <a href="https://www.basspistol.com/index2024.html#read">This page</a> might answer some of your questions. </p> </article>
</div> <div class="border now" style="display: flex; flex-wrap: wrap; flex: 1 1 100%; background-image: linear-gradient(to bottom, rgba(0, 0, 0, .9), rgba(0, 0, 0, .9)), url(/2025/images/kybernetik.webp); background-position: center center; background-size: cover">
{{ range first 2 (where .Site.RegularPages "Type" "news") }} <figure style="flex: 1 1 50%;">
<img src="/2025/images/kybernetik.webp" />
<div class="border now" style="background-image: linear-gradient(to bottom, rgba(0, 0, 0, .9), rgba(0, 0, 0, .9)), url({{ .Params.image.url }});">
<figure>
<img src="{{ .Params.image.url }}" alt="{{ .Params.image.alt }}" />
<figcaption>
<p><b>Artwork:</b> <a href="{{ .Params.image.credits.url }}" target="_blank">{{ .Params.image.credits.name }}</a> ({{ .Params.image.license }})</p>
{{ if eq .Params.release true }}
<p><b>Catalogue:</b> {{ .Params.catalogue }}</p>
<p><b>Label:</b> {{ .Params.recordlabel | markdownify }}</p>
<p><b>License:</b> {{ .Params.license }}</p>
<p><b>Released:</b> {{ .Params.date | dateFormat "2006-01-02" }}
{{ end }}
</figcaption>
</figure> </figure>
<div>
<p><strong>Kybernetik LP by Revengeday</strong></p>
<p>In collaboration with the houses of <a href="https://corteximplant.com/about">Cortex Implant</a> and <a href="https://obeythesystem.com/">Obey The System,</a> Basspistol is immensely proud to present Kybernetik LP by <a href="https://revenge.day/discography/kybernetik">Revengeday.</a>
<br /><br />
The depth of the darkness and the attention to detail with which Revengeday manages to infuse his music is beyond written word. The work of a world builder, showing a glimpse of what 20 minutes in the future look like, but seen from 30 years ahead. Take a trip from Cairo to Berlin, via Tokyo and Chirak.</p>
<div class="news"> <a class="button" href="https://shop.basspistol.com/bpist-023">Get this 💎</a>
<h4>{{ .Title }}</h4> </div>
{{ .Content | markdownify }} <div style="font-size: .75em;">
<p><b>Catalogue:</b> #BPIST-023</p>
<a class="button" href="{{ .Params.cta.url }}" target="_blank">{{ .Params.cta.label }}</a> <p><b>Label:</b> Basspistol & <a href="https://obeythesystem.com/">OBEY THE SYSTEM</a> / <a href="https://corteximplant.com/about">CORTEX IMPLANT</a></p>
<p><b>Artwork:</b> Ramses Revengeday</p>
<p><b>License:</b> CC BY-NC-ND 4.0</p>
</div> </div>
</div> </div>
{{ end }} <article class="border">
<article class="border" id="newsletter">
{{ partial "body/newsletter.html" . }} {{ partial "body/newsletter.html" . }}
</article> </article>
<article class="border support"> <article class="section-footers"></article>
<h4>𝕾𝖚𝖕𝖕𝖔𝖗𝖙 𝖙𝖍𝖊 𝕮𝖆𝖚𝖘𝖊</h4>
<p>Basspistol doesn't really need your support, but it's always nice to soften the edges of the server costs. If you feel so inclined, you can contribute to the cause by donating in Bitcoin (Satoshis over Lightning) or Petro-Euros via Liberapay and Ko-Fi!</p>
<p>You know, get the sysadmins a root-beer or some shiet.</p>
<a target="_blank" href="https://getalby.com/p/thrilliridescent759578"><img src="/2025/images/Bitcoin-Logo.png" /></a>
<a target="_blank" href="https://liberapay.com/Basspistol"><img src="/2025/images/liberapay.png" /></a>
<a target="_blank" href="https://ko-fi.com/basspistol"><img src="/2025/images/kofi.png" /></a>
<p>Spank you very much! 💘</p>
</article>
<div class="section-footers"></div>
</section> </section>

View file

@ -0,0 +1,202 @@
<style>
#peertube {
display: flex;
flex-wrap: wrap;
flex-direction: row;
article {
margin: 2px;
flex: 1 1 300px;
.cartouche {
display: flex;
align-items: center;
justify-content: left;
flex-wrap: wrap;
width: 100%;
}
.cartouche > a {
flex: 0 0 100px;
}
.cartouche > p {
flex: 1 1 100px;
font-size: 1em;
font-weight: bold;
text-transform: uppercase;
}
}
h2 {
font-size: 12em;
/* text-transform: uppercase;*/
line-height: 1em;
flex: 1 1 100%;
}
p {
flex: 1 1 100%;
line-height: 1em;
strong {
font-size: 1.5em;
}
}
@media screen and (max-width: 1024px) {
h2 {
font-size: 8em;
}
p {
font-size: 1em;
}
}
.peertubes {
display: flex;
align-items: end;
padding: 20px;
justify-content: center;
flex: 1 1 300px;
min-height: 300px;
background-size: cover;
background-position: center center;
linear-gradient(to bottom, rgba(245, 246, 252, 0.52), rgba(117, 19, 93, 0.73)),
}
.peertubes:hover {
background-size: cover;
background-position: center center;
linear-gradient(to bottom, rgba(245, 246, 252, 0), rgba(117, 19, 93, 0)),
}
.section-headers {
padding: 80px;
flex: 1 1 300px;
}
}
</style>
{{ $data := dict }}
{{ $url := "https://v.basspistol.org/api/v1/videos?isLocal=true&count=100" }}
<section id="peertube">
<article class="section-headers">
<h2>BassTube</h2>
<p><strong>Videos from the deepweb.</strong>
<br />Decentralized, peer-to-peer, for the people!
</p>
</article>
{{ with try (resources.GetRemote $url) }}
{{ with .Err }}
{{ errorf "%s" . }}
{{ else with .Value }}
{{ $data = .Content | transform.Unmarshal }}
{{ else }}
{{ errorf "Unable to get remote resource %q" $url }}
{{ end }}
{{ end }}
{{ with $data.data }}
{{ range . | shuffle | last 5 }}
<article class="peertubes" style="background-image:linear-gradient(to bottom, rgba(128, 0, 128, 1), rgba(128, 0, 128, .75)),url(https://v.basspistol.org{{ .previewPath }})">
<div class="cartouche">
<a href="{{ .url }}" target="_blank">
<svg
width="75"
height="75"
version="1.1"
viewBox="0 0 57.679166 57.67917"
id="svg2"
xml:space="preserve"
xmlns:xlink="http://www.w3.org/1999/xlink"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg"><defs
id="defs2"><clipPath
clipPathUnits="userSpaceOnUse"
id="clipPath2"><path
d="M 58.028369,28.839501 A 28.839999,28.839999 0 0 1 29.188368,57.6795 28.839999,28.839999 0 0 1 0.34836804,28.839501 28.839999,28.839999 0 0 1 29.188368,-4.9957302e-4 28.839999,28.839999 0 0 1 58.028369,28.839501 Z"
fill="purple"
stroke-width="4.83809"
style="stroke-linecap:round;stroke-linejoin:round;paint-order:markers stroke fill"
id="path3" /></clipPath><filter
style="color-interpolation-filters:sRGB"
id="filter25"
x="-0.64945344"
y="-0.51138139"
width="2.2988969"
height="2.0227628"><feFlood
result="flood"
in="SourceGraphic"
flood-opacity="1.000000"
flood-color="rgb(0,0,0)"
id="feFlood24" /><feGaussianBlur
result="blur"
in="SourceGraphic"
stdDeviation="3.300000"
id="feGaussianBlur24" /><feOffset
result="offset"
in="blur"
dx="0.000000"
dy="0.000000"
id="feOffset24" /><feComposite
result="comp1"
operator="in"
in="flood"
in2="offset"
id="feComposite24" /><feComposite
result="comp2"
operator="over"
in="SourceGraphic"
in2="comp1"
id="feComposite25" /></filter></defs><image
width="58.376736"
height="57.679001"
preserveAspectRatio="none"
{{ range .account.avatars | last 1 }}
{{ if .fileUrl }}xlink:href="{{ .fileUrl }}"{{ else }}xlink:href="https://v.basspistol.org/client/assets/images/logo.svg"{{ end }}
{{ end }}
id="image1"
x="0"
y="0"
clip-path="url(#clipPath2)"
transform="matrix(0.9999855,0,0,1.0000029,-0.34836299,0)" /><path
d="m 23.067499,19.43 14.82,9.4106 -14.82,9.4105 z"
fill="orange"
stroke="none"
stroke-width="3.4098"
style="fill:orange;fill-opacity:1;stroke:orange;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1;paint-order:stroke fill markers;filter:url(#filter25)"
id="path2" />
</svg>
</a>
<div>
<p>{{ .name }}</p>
<p>{{ .account.displayName }}</p>
</div>
</div>
</article>
{{ end }}
<!-- <pre>{{ debug.Dump $data }}</pre>-->
{{ end }}
</section>

View file

@ -101,13 +101,12 @@
<article class="section-headers" style="background-image: url(/2025/images/peertube.webp);"> <article class="section-headers" style="background-image: url(/2025/images/peertube.webp);">
<h2>BassTube</h2> <h2>BassTube</h2>
<p> <p>
<strong>𝖁𝖎𝖉𝖊𝖔𝖘 𝖋𝖗𝖔𝖒 𝖙𝖍𝖊 𝕯𝖊𝖊𝖕𝖜𝖊𝖇</strong> <strong>Videos from the deepweb.</strong>
<br />Decentralized, peer-to-peer, for the people! All you saw was sound! <br />Decentralized, peer-to-peer, for the people! All you saw was sound!
<br /><br /> <br /><br />
Basspistol facilitates <a href="https://v.basspistol.org" style="text-decoration: underline;">a Peertube instance</a>, tapping into a large network of independent and sovereign creators from the deepweb. The videos displayed bellow are shuffled every 30 minute, by the random gods. Basspistol facilitates <a href="https://v.basspistol.org" style="text-decoration: underline;">a Peertube instance</a>, tapping into a large network of independent and sovereign creators from the deepweb. The videos displayed bellow are shuffled every 30 minute, by the random gods.
</p> </p>
<a class="button" href="https://v.basspistol.org/">More videos 📺</a>
</article> </article>
{{ with try (resources.GetRemote $url) }} {{ with try (resources.GetRemote $url) }}

View file

@ -1,125 +1,62 @@
<style>
#radio {
display: flex;
flex-wrap: wrap;
flex-direction: row;
article {
flex: 1 1 300px;
}
h2 {
font-size: 12em;
/* text-transform: uppercase;*/
line-height: 1em;
flex: 1 1 100%;
}
p {
flex: 1 1 100%;
font-size: .6em;
line-height: 1.75em;
max-width: 33vw;
strong {
font-size: 1.25em;
}
}
@media screen and (max-width: 1024px) {
h2 {
font-size: 8em;
}
p {
font-size: .9em;
max-width: unset;
}
strong {
font-size: 1.5em;
}
}
}
</style>
<section id="radio"> <section id="radio">
<div class="section-headers" style="background-image: url(/2025/images/radio.webp);"> <article class="section-headers" style="background-image: url(/2025/images/radio.webp);">
<h2>RadioStation</h2> <h2>RadioStation</h2>
<h4>𝕭𝖆𝖘𝖘𝖕𝖎𝖘𝖙𝖔𝖑 𝕽𝖆𝖉𝖎𝖔 𝕾𝖙𝖆𝖙𝖎𝖔𝖓</h4> <p><strong>Basspistol Radio Station! </strong><br />777% music, without commercials! RobotDJ-sets and live interventions! This is the sound of freedom.</p>
<p>777% music, without commercials! RobotDJ-sets and live interventions! This is the sound of freedom.</p> </article>
<div class="border">
<iframe src="https://radio.basspistol.com/public/basspistol/embed?theme=dark" frameborder="0" allowtransparency="true" style="width: 100%; min-height: 150px; border: 0;"></iframe>
<iframe src="https://radio.basspistol.com/public/basspistol/history?theme=dark" frameborder="0" allowtransparency="true" style="width: 100%; min-height: 480px; border: 0;"></iframe>
</div> </div>
<div class="border radioplayer"> <article class="section-footers"></article>
<div class="legend-container">
<div class="legend">
<button id="myBtn">▶️</button>
<div>
<h4 id="npTitle"></h4>
<p id="npArtist"></p>
<audio preload="none" id="radioAudio">
<source src="https://radio.basspistol.com/listen/basspistol/radio.mp3" type="audio/mpeg">
Your browser does not support the audio element.
</audio>
</div>
</div>
<div>
<br />
<a target="_blank" href="" id="supportButtonDelux" class="button player">🫰 Support this Artist</a>
<br />
<a class="button" target="_blank" href="https://radio.basspistol.com/public/basspistol">📻 Request song</a>
<br />
<a class="button" target="_blank" href="https://radio.basspistol.com/public/basspistol/schedule">🗓️ Schedule</a>
</div>
</div>
<div id="recordPlayer">
<img src="" id="coverArt" />
</div>
</div>
<div class="section-footers"></div>
</section> </section>
<script>
console.log("Loading Basspistol Radio! Enjoy!");
// Logic to fetch URL of currently playing artist
const list = document.createDocumentFragment();
const supportUrl = 'https://radio.basspistol.com/api/nowplaying';
// Catch elements that need influece
// support button
let supportButtonDelux = document.getElementById('supportButtonDelux');
// record player
let coverArt = document.getElementById('coverArt');
coverArt.classList.add("btn");
// Title and Artist
let npArtist = document.getElementById('npArtist');
let npTitle = document.getElementById('npTitle');
function timeleyManner(){
fetch(supportUrl)
.then((response) => {
return response.json();
})
.then((data) => {
let supportClicker = data;
supportClicker.map(function(support) {
// set background image in record player
coverArt.src = `${support.now_playing.song.art}`;
// print text
npTitle.innerHTML = `${support.now_playing.song.title}`;
npArtist.innerHTML = `by ${support.now_playing.song.artist}`;
if(`${support.now_playing.song.custom_fields.support_url}` != "null") {
supportButtonDelux.href = `${support.now_playing.song.custom_fields.support_url}` + "?ref=radio.basspistol.com" + "&title=" + `${support.now_playing.song.text}`;
}
else {
supportButtonDelux.href = "https://www.urbandictionary.com/define.php?term=Anon";
}
});
})
.catch(function(error) {
console.log(error);
});
}
timeleyManner();
setInterval(function(){
timeleyManner();
}, 10000)
// player logic
var audio = document.getElementById("radioAudio");
var btn = document.getElementById("myBtn");
btn.onclick = function() {
if (audio.paused) {
audio.play();
btn.innerHTML = "⏸️";
coverArt.classList.add("spinner");
coverArt.classList.remove("stop");
} else {
audio.pause();
btn.innerHTML = "▶️";
coverArt.classList.add("stop");
}
};
</script>

View file

@ -1,12 +1,11 @@
<footer> <footer>
<section id="footer"> <section id="footer">
<article class="border" style="border-radius: 100px; height: 480px"> <article class="border" style="border-radius: 100px; height: 480px">
<p><strong>{{ now | dateFormat "2006" }} Basspistol (CC-BY-NC-SA)</strong></p> <p><strong>Copyleft {{ now | dateFormat "2006" }} Basspistol (CC-BY-NC-SA)</strong></p>
<p>Last build: {{ now | dateFormat "2006-01-02 15:04 UTC" }}</p> <p>Last build: {{ now | dateFormat "2006-01-02 15:04 UTC" }}</p>
<p>Big thanks to <a href="https://velvetyne.fr/">Velvetyne</a> for the mad fonts. <p>Big thanks to <a href="https://velvetyne.fr/">Velvetyne</a> for the mad fonts.
<p>𝕿𝖍𝖊 𝖚𝖓𝖉𝖊𝖗𝖌𝖗𝖔𝖚𝖓𝖉 𝖎𝖘 𝖉𝖊𝖆𝖉, 𝖑𝖔𝖓𝖌 𝖑𝖎𝖛𝖊 𝖙𝖍𝖊 𝖚𝖓𝖉𝖊𝖗𝖌𝖗𝖔𝖚𝖓𝖉.</p> <p>𝕿𝖍𝖊 𝖚𝖓𝖉𝖊𝖗𝖌𝖗𝖔𝖚𝖓𝖉 𝖎𝖘 𝖉𝖊𝖆𝖉, 𝖑𝖔𝖓𝖌 𝖑𝖎𝖛𝖊 𝖙𝖍𝖊 𝖚𝖓𝖉𝖊𝖗𝖌𝖗𝖔𝖚𝖓𝖉.</p>
<p>Contact: info+web@basspistol.com</p> <p>Contact: info+web@basspistol.com</p>
<p>Typo? Bug? just wondering how this thing is built? <a href="https://git.basspistol.org/hq/basspistol2025">Check out the source code</a>
</article> </article>
</section> </section>

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 100 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.5 KiB