-
![](/static/nostr-icon-purple-64x64.png)
@ e3ba5e1a:5e433365
2025-02-05 17:47:16
I got into a [friendly discussion](https://x.com/snoyberg/status/1887007888117252142) on X regarding health insurance. The specific question was how to deal with health insurance companies (presumably unfairly) denying claims? My answer, as usual: get government out of it!
The US healthcare system is essentially the worst of both worlds:
* Unlike full single payer, individuals incur high costs
* Unlike a true free market, regulation causes increases in costs and decreases competition among insurers
I'm firmly on the side of moving towards the free market. (And I say that as someone living under a single payer system now.) Here's what I would do:
* Get rid of tax incentives that make health insurance tied to your employer, giving individuals back proper freedom of choice.
* Reduce regulations significantly.
* In the short term, some people will still get rejected claims and other obnoxious behavior from insurance companies. We address that in two ways:
1. Due to reduced regulations, new insurance companies will be able to enter the market offering more reliable coverage and better rates, and people will flock to them because they have the freedom to make their own choices.
2. Sue the asses off of companies that reject claims unfairly. And ideally, as one of the few legitimate roles of government in all this, institute new laws that limit the ability of fine print to allow insurers to escape their responsibilities. (I'm hesitant that the latter will happen due to the incestuous relationship between Congress/regulators and insurers, but I can hope.)
Will this magically fix everything overnight like politicians normally promise? No. But it will allow the market to return to a healthy state. And I don't think it will take long (order of magnitude: 5-10 years) for it to come together, but that's just speculation.
And since there's a high correlation between those who believe government can fix problems by taking more control and demanding that only credentialed experts weigh in on a topic (both points I strongly disagree with BTW): I'm a trained actuary and worked in the insurance industry, and have directly seen how government regulation reduces competition, raises prices, and harms consumers.
And my final point: I don't think any prior art would be a good comparison for deregulation in the US, it's such a different market than any other country in the world for so many reasons that lessons wouldn't really translate. Nonetheless, I asked Grok for some empirical data on this, and at best the results of deregulation could be called "mixed," but likely more accurately "uncertain, confused, and subject to whatever interpretation anyone wants to apply."
https://x.com/i/grok/share/Zc8yOdrN8lS275hXJ92uwq98M
-
![](/static/nostr-icon-purple-64x64.png)
@ 57d1a264:69f1fee1
2025-02-05 02:18:03
![](https://m.stacker.news/76183)
Pre-Foundational learning for these participants has now kicked off in the Bitcoin Design Community, check out the #education channel on the [Bitcoin.Design](https://Bitcoin.Design) [Discord channel](https://discord.com/channels/903125802726596648/1260871907050393620).
## 🪇 10 talented participants from South America will be:
Learning bitcoin UX Design fundamentals using the Bitcoin Design Guide
Working hands-on with South American-built products to evaluate their user experiences and support builders with data
> Attending [BTC++ in Florianópolis](https://btcplusplus.dev/conf/floripa)
This initiative is sponsored by the [Human Rights Foundation](https://HRF.org) in collaboration with the [Bitcoin Design Foundation](https://bitcoindesignfoundation.org/) and [Area Bitcoin](https://areabitcoin.co).
## 🥅 Goals:
- Empower local talent to improve the UX of South American bitcoin products - seeing their passion and drive to bring bitcoin to their countries is really inspiring
- Create meaningful relationships with wallet developers through practical collaboration
- Scale bitcoin adoption by improving the user experience
- Create a public knowledge base: All research conducted in Africa and South America will be made publicly available for builders
originally posted at https://stacker.news/items/876215
-
![](/static/nostr-icon-purple-64x64.png)
@ 57d1a264:69f1fee1
2025-02-05 00:25:20
# How does open source development contribute to bitcoin's security, reliability, and evolution as a network?
originally posted at https://stacker.news/items/876130
-
![](/static/nostr-icon-purple-64x64.png)
@ 91bea5cd:1df4451c
2025-02-04 17:24:50
### Definição de ULID:
Timestamp 48 bits, Aleatoriedade 80 bits
Sendo Timestamp 48 bits inteiro, tempo UNIX em milissegundos, Não ficará sem espaço até o ano 10889 d.C.
e Aleatoriedade 80 bits, Fonte criptograficamente segura de aleatoriedade, se possível.
#### Gerar ULID
```sql
CREATE EXTENSION IF NOT EXISTS pgcrypto;
CREATE FUNCTION generate_ulid()
RETURNS TEXT
AS $$
DECLARE
-- Crockford's Base32
encoding BYTEA = '0123456789ABCDEFGHJKMNPQRSTVWXYZ';
timestamp BYTEA = E'\\000\\000\\000\\000\\000\\000';
output TEXT = '';
unix_time BIGINT;
ulid BYTEA;
BEGIN
-- 6 timestamp bytes
unix_time = (EXTRACT(EPOCH FROM CLOCK_TIMESTAMP()) * 1000)::BIGINT;
timestamp = SET_BYTE(timestamp, 0, (unix_time >> 40)::BIT(8)::INTEGER);
timestamp = SET_BYTE(timestamp, 1, (unix_time >> 32)::BIT(8)::INTEGER);
timestamp = SET_BYTE(timestamp, 2, (unix_time >> 24)::BIT(8)::INTEGER);
timestamp = SET_BYTE(timestamp, 3, (unix_time >> 16)::BIT(8)::INTEGER);
timestamp = SET_BYTE(timestamp, 4, (unix_time >> 8)::BIT(8)::INTEGER);
timestamp = SET_BYTE(timestamp, 5, unix_time::BIT(8)::INTEGER);
-- 10 entropy bytes
ulid = timestamp || gen_random_bytes(10);
-- Encode the timestamp
output = output || CHR(GET_BYTE(encoding, (GET_BYTE(ulid, 0) & 224) >> 5));
output = output || CHR(GET_BYTE(encoding, (GET_BYTE(ulid, 0) & 31)));
output = output || CHR(GET_BYTE(encoding, (GET_BYTE(ulid, 1) & 248) >> 3));
output = output || CHR(GET_BYTE(encoding, ((GET_BYTE(ulid, 1) & 7) << 2) | ((GET_BYTE(ulid, 2) & 192) >> 6)));
output = output || CHR(GET_BYTE(encoding, (GET_BYTE(ulid, 2) & 62) >> 1));
output = output || CHR(GET_BYTE(encoding, ((GET_BYTE(ulid, 2) & 1) << 4) | ((GET_BYTE(ulid, 3) & 240) >> 4)));
output = output || CHR(GET_BYTE(encoding, ((GET_BYTE(ulid, 3) & 15) << 1) | ((GET_BYTE(ulid, 4) & 128) >> 7)));
output = output || CHR(GET_BYTE(encoding, (GET_BYTE(ulid, 4) & 124) >> 2));
output = output || CHR(GET_BYTE(encoding, ((GET_BYTE(ulid, 4) & 3) << 3) | ((GET_BYTE(ulid, 5) & 224) >> 5)));
output = output || CHR(GET_BYTE(encoding, (GET_BYTE(ulid, 5) & 31)));
-- Encode the entropy
output = output || CHR(GET_BYTE(encoding, (GET_BYTE(ulid, 6) & 248) >> 3));
output = output || CHR(GET_BYTE(encoding, ((GET_BYTE(ulid, 6) & 7) << 2) | ((GET_BYTE(ulid, 7) & 192) >> 6)));
output = output || CHR(GET_BYTE(encoding, (GET_BYTE(ulid, 7) & 62) >> 1));
output = output || CHR(GET_BYTE(encoding, ((GET_BYTE(ulid, 7) & 1) << 4) | ((GET_BYTE(ulid, 8) & 240) >> 4)));
output = output || CHR(GET_BYTE(encoding, ((GET_BYTE(ulid, 8) & 15) << 1) | ((GET_BYTE(ulid, 9) & 128) >> 7)));
output = output || CHR(GET_BYTE(encoding, (GET_BYTE(ulid, 9) & 124) >> 2));
output = output || CHR(GET_BYTE(encoding, ((GET_BYTE(ulid, 9) & 3) << 3) | ((GET_BYTE(ulid, 10) & 224) >> 5)));
output = output || CHR(GET_BYTE(encoding, (GET_BYTE(ulid, 10) & 31)));
output = output || CHR(GET_BYTE(encoding, (GET_BYTE(ulid, 11) & 248) >> 3));
output = output || CHR(GET_BYTE(encoding, ((GET_BYTE(ulid, 11) & 7) << 2) | ((GET_BYTE(ulid, 12) & 192) >> 6)));
output = output || CHR(GET_BYTE(encoding, (GET_BYTE(ulid, 12) & 62) >> 1));
output = output || CHR(GET_BYTE(encoding, ((GET_BYTE(ulid, 12) & 1) << 4) | ((GET_BYTE(ulid, 13) & 240) >> 4)));
output = output || CHR(GET_BYTE(encoding, ((GET_BYTE(ulid, 13) & 15) << 1) | ((GET_BYTE(ulid, 14) & 128) >> 7)));
output = output || CHR(GET_BYTE(encoding, (GET_BYTE(ulid, 14) & 124) >> 2));
output = output || CHR(GET_BYTE(encoding, ((GET_BYTE(ulid, 14) & 3) << 3) | ((GET_BYTE(ulid, 15) & 224) >> 5)));
output = output || CHR(GET_BYTE(encoding, (GET_BYTE(ulid, 15) & 31)));
RETURN output;
END
$$
LANGUAGE plpgsql
VOLATILE;
```
#### ULID TO UUID
```sql
CREATE OR REPLACE FUNCTION parse_ulid(ulid text) RETURNS bytea AS $$
DECLARE
-- 16byte
bytes bytea = E'\\x00000000 00000000 00000000 00000000';
v char[];
-- Allow for O(1) lookup of index values
dec integer[] = ARRAY[
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 0, 1, 2,
3, 4, 5, 6, 7, 8, 9, 255, 255, 255,
255, 255, 255, 255, 10, 11, 12, 13, 14, 15,
16, 17, 1, 18, 19, 1, 20, 21, 0, 22,
23, 24, 25, 26, 255, 27, 28, 29, 30, 31,
255, 255, 255, 255, 255, 255, 10, 11, 12, 13,
14, 15, 16, 17, 1, 18, 19, 1, 20, 21,
0, 22, 23, 24, 25, 26, 255, 27, 28, 29,
30, 31
];
BEGIN
IF NOT ulid ~* '^[0-7][0-9ABCDEFGHJKMNPQRSTVWXYZ]{25}$' THEN
RAISE EXCEPTION 'Invalid ULID: %', ulid;
END IF;
v = regexp_split_to_array(ulid, '');
-- 6 bytes timestamp (48 bits)
bytes = SET_BYTE(bytes, 0, (dec[ASCII(v[1])] << 5) | dec[ASCII(v[2])]);
bytes = SET_BYTE(bytes, 1, (dec[ASCII(v[3])] << 3) | (dec[ASCII(v[4])] >> 2));
bytes = SET_BYTE(bytes, 2, (dec[ASCII(v[4])] << 6) | (dec[ASCII(v[5])] << 1) | (dec[ASCII(v[6])] >> 4));
bytes = SET_BYTE(bytes, 3, (dec[ASCII(v[6])] << 4) | (dec[ASCII(v[7])] >> 1));
bytes = SET_BYTE(bytes, 4, (dec[ASCII(v[7])] << 7) | (dec[ASCII(v[8])] << 2) | (dec[ASCII(v[9])] >> 3));
bytes = SET_BYTE(bytes, 5, (dec[ASCII(v[9])] << 5) | dec[ASCII(v[10])]);
-- 10 bytes of entropy (80 bits);
bytes = SET_BYTE(bytes, 6, (dec[ASCII(v[11])] << 3) | (dec[ASCII(v[12])] >> 2));
bytes = SET_BYTE(bytes, 7, (dec[ASCII(v[12])] << 6) | (dec[ASCII(v[13])] << 1) | (dec[ASCII(v[14])] >> 4));
bytes = SET_BYTE(bytes, 8, (dec[ASCII(v[14])] << 4) | (dec[ASCII(v[15])] >> 1));
bytes = SET_BYTE(bytes, 9, (dec[ASCII(v[15])] << 7) | (dec[ASCII(v[16])] << 2) | (dec[ASCII(v[17])] >> 3));
bytes = SET_BYTE(bytes, 10, (dec[ASCII(v[17])] << 5) | dec[ASCII(v[18])]);
bytes = SET_BYTE(bytes, 11, (dec[ASCII(v[19])] << 3) | (dec[ASCII(v[20])] >> 2));
bytes = SET_BYTE(bytes, 12, (dec[ASCII(v[20])] << 6) | (dec[ASCII(v[21])] << 1) | (dec[ASCII(v[22])] >> 4));
bytes = SET_BYTE(bytes, 13, (dec[ASCII(v[22])] << 4) | (dec[ASCII(v[23])] >> 1));
bytes = SET_BYTE(bytes, 14, (dec[ASCII(v[23])] << 7) | (dec[ASCII(v[24])] << 2) | (dec[ASCII(v[25])] >> 3));
bytes = SET_BYTE(bytes, 15, (dec[ASCII(v[25])] << 5) | dec[ASCII(v[26])]);
RETURN bytes;
END
$$
LANGUAGE plpgsql
IMMUTABLE;
CREATE OR REPLACE FUNCTION ulid_to_uuid(ulid text) RETURNS uuid AS $$
BEGIN
RETURN encode(parse_ulid(ulid), 'hex')::uuid;
END
$$
LANGUAGE plpgsql
IMMUTABLE;
```
#### UUID to ULID
```sql
CREATE OR REPLACE FUNCTION uuid_to_ulid(id uuid) RETURNS text AS $$
DECLARE
encoding bytea = '0123456789ABCDEFGHJKMNPQRSTVWXYZ';
output text = '';
uuid_bytes bytea = uuid_send(id);
BEGIN
-- Encode the timestamp
output = output || CHR(GET_BYTE(encoding, (GET_BYTE(uuid_bytes, 0) & 224) >> 5));
output = output || CHR(GET_BYTE(encoding, (GET_BYTE(uuid_bytes, 0) & 31)));
output = output || CHR(GET_BYTE(encoding, (GET_BYTE(uuid_bytes, 1) & 248) >> 3));
output = output || CHR(GET_BYTE(encoding, ((GET_BYTE(uuid_bytes, 1) & 7) << 2) | ((GET_BYTE(uuid_bytes, 2) & 192) >> 6)));
output = output || CHR(GET_BYTE(encoding, (GET_BYTE(uuid_bytes, 2) & 62) >> 1));
output = output || CHR(GET_BYTE(encoding, ((GET_BYTE(uuid_bytes, 2) & 1) << 4) | ((GET_BYTE(uuid_bytes, 3) & 240) >> 4)));
output = output || CHR(GET_BYTE(encoding, ((GET_BYTE(uuid_bytes, 3) & 15) << 1) | ((GET_BYTE(uuid_bytes, 4) & 128) >> 7)));
output = output || CHR(GET_BYTE(encoding, (GET_BYTE(uuid_bytes, 4) & 124) >> 2));
output = output || CHR(GET_BYTE(encoding, ((GET_BYTE(uuid_bytes, 4) & 3) << 3) | ((GET_BYTE(uuid_bytes, 5) & 224) >> 5)));
output = output || CHR(GET_BYTE(encoding, (GET_BYTE(uuid_bytes, 5) & 31)));
-- Encode the entropy
output = output || CHR(GET_BYTE(encoding, (GET_BYTE(uuid_bytes, 6) & 248) >> 3));
output = output || CHR(GET_BYTE(encoding, ((GET_BYTE(uuid_bytes, 6) & 7) << 2) | ((GET_BYTE(uuid_bytes, 7) & 192) >> 6)));
output = output || CHR(GET_BYTE(encoding, (GET_BYTE(uuid_bytes, 7) & 62) >> 1));
output = output || CHR(GET_BYTE(encoding, ((GET_BYTE(uuid_bytes, 7) & 1) << 4) | ((GET_BYTE(uuid_bytes, 8) & 240) >> 4)));
output = output || CHR(GET_BYTE(encoding, ((GET_BYTE(uuid_bytes, 8) & 15) << 1) | ((GET_BYTE(uuid_bytes, 9) & 128) >> 7)));
output = output || CHR(GET_BYTE(encoding, (GET_BYTE(uuid_bytes, 9) & 124) >> 2));
output = output || CHR(GET_BYTE(encoding, ((GET_BYTE(uuid_bytes, 9) & 3) << 3) | ((GET_BYTE(uuid_bytes, 10) & 224) >> 5)));
output = output || CHR(GET_BYTE(encoding, (GET_BYTE(uuid_bytes, 10) & 31)));
output = output || CHR(GET_BYTE(encoding, (GET_BYTE(uuid_bytes, 11) & 248) >> 3));
output = output || CHR(GET_BYTE(encoding, ((GET_BYTE(uuid_bytes, 11) & 7) << 2) | ((GET_BYTE(uuid_bytes, 12) & 192) >> 6)));
output = output || CHR(GET_BYTE(encoding, (GET_BYTE(uuid_bytes, 12) & 62) >> 1));
output = output || CHR(GET_BYTE(encoding, ((GET_BYTE(uuid_bytes, 12) & 1) << 4) | ((GET_BYTE(uuid_bytes, 13) & 240) >> 4)));
output = output || CHR(GET_BYTE(encoding, ((GET_BYTE(uuid_bytes, 13) & 15) << 1) | ((GET_BYTE(uuid_bytes, 14) & 128) >> 7)));
output = output || CHR(GET_BYTE(encoding, (GET_BYTE(uuid_bytes, 14) & 124) >> 2));
output = output || CHR(GET_BYTE(encoding, ((GET_BYTE(uuid_bytes, 14) & 3) << 3) | ((GET_BYTE(uuid_bytes, 15) & 224) >> 5)));
output = output || CHR(GET_BYTE(encoding, (GET_BYTE(uuid_bytes, 15) & 31)));
RETURN output;
END
$$
LANGUAGE plpgsql
IMMUTABLE;
```
#### Gera 11 Digitos aleatórios: YBKXG0CKTH4
```sql
-- Cria a extensão pgcrypto para gerar uuid
CREATE EXTENSION IF NOT EXISTS pgcrypto;
-- Cria a função para gerar ULID
CREATE OR REPLACE FUNCTION gen_lrandom()
RETURNS TEXT AS $$
DECLARE
ts_millis BIGINT;
ts_chars TEXT;
random_bytes BYTEA;
random_chars TEXT;
base32_chars TEXT := '0123456789ABCDEFGHJKMNPQRSTVWXYZ';
i INT;
BEGIN
-- Pega o timestamp em milissegundos
ts_millis := FLOOR(EXTRACT(EPOCH FROM clock_timestamp()) * 1000)::BIGINT;
-- Converte o timestamp para base32
ts_chars := '';
FOR i IN REVERSE 0..11 LOOP
ts_chars := ts_chars || substr(base32_chars, ((ts_millis >> (5 * i)) & 31) + 1, 1);
END LOOP;
-- Gera 10 bytes aleatórios e converte para base32
random_bytes := gen_random_bytes(10);
random_chars := '';
FOR i IN 0..9 LOOP
random_chars := random_chars || substr(base32_chars, ((get_byte(random_bytes, i) >> 3) & 31) + 1, 1);
IF i < 9 THEN
random_chars := random_chars || substr(base32_chars, (((get_byte(random_bytes, i) & 7) << 2) | (get_byte(random_bytes, i + 1) >> 6)) & 31 + 1, 1);
ELSE
random_chars := random_chars || substr(base32_chars, ((get_byte(random_bytes, i) & 7) << 2) + 1, 1);
END IF;
END LOOP;
-- Concatena o timestamp e os caracteres aleatórios
RETURN ts_chars || random_chars;
END;
$$ LANGUAGE plpgsql;
```
#### Exemplo de USO
```sql
-- Criação da extensão caso não exista
CREATE EXTENSION
IF
NOT EXISTS pgcrypto;
-- Criação da tabela pessoas
CREATE TABLE pessoas ( ID UUID DEFAULT gen_random_uuid ( ) PRIMARY KEY, nome TEXT NOT NULL );
-- Busca Pessoa na tabela
SELECT
*
FROM
"pessoas"
WHERE
uuid_to_ulid ( ID ) = '252FAC9F3V8EF80SSDK8PXW02F';
```
### Fontes
- https://github.com/scoville/pgsql-ulid
- https://github.com/geckoboard/pgulid
-
![](/static/nostr-icon-purple-64x64.png)
@ 1833ee04:7c4a8170
2025-02-04 15:14:03
The international race for Bitcoin strategic reserves is just getting started.
If you’re stacking now, you’re still incredibly early.
At $100k per Bitcoin, it’s practically free for anyone who truly understands how massive this shift is.
Think back to when paper currency was introduced, people had to trade their gold for paper bills. Many laughed, saying, Who’s going to trust these worthless pieces of paper as money?
Yet today, you sell your time to earn these paper bills while your government can print an unlimited amount at will.
The world is returning to a gold standard. But this time, it’s Gold 2.0 which is Bitcoin.The international race for Bitcoin strategic reserves is just getting started.\
\
If you’re stacking now, you’re still incredibly early.\
\
At $100k per Bitcoin, it’s practically free for anyone who truly understands how massive this shift is.\
\
Think back to when paper currency was introduced, people had to trade their gold for paper bills. Many laughed, saying, Who’s going to trust these worthless pieces of paper as money?\
\
Yet today, you sell your time to earn these paper bills while your government can print an unlimited amount at will.\
\
The world is returning to a gold standard. But this time, it’s Gold 2.0 which is Bitcoin.
-
![](/static/nostr-icon-purple-64x64.png)
@ e3ba5e1a:5e433365
2025-02-04 08:29:00
President Trump has started rolling out his tariffs, something I [blogged about in November](https://www.snoyman.com/blog/2024/11/steelmanning-tariffs/). People are talking about these tariffs a lot right now, with many people (correctly) commenting on how consumers will end up with higher prices as a result of these tariffs. While that part is true, I’ve seen a lot of people taking it to the next, incorrect step: that consumers will pay the entirety of the tax. I [put up a poll on X](https://x.com/snoyberg/status/1886035800019599808) to see what people thought, and while the right answer got a lot of votes, it wasn't the winner.
![image](https://yakihonne.s3.ap-east-1.amazonaws.com/e3ba5e1a06e11c860036b5c5e688012be2a84760abc066ac34a099535e433365/files/1738657292355-YAKIHONNES3.png)
For purposes of this blog post, our ultimate question will be the following:
* Suppose apples currently sell for $1 each in the entire United States.
* There are domestic sellers and foreign sellers of apples, all receiving the same price.
* There are no taxes or tariffs on the purchase of apples.
* The question is: if the US federal government puts a $0.50 import tariff per apple, what will be the change in the following:
* Number of apples bought in the US
* Price paid by buyers for apples in the US
* Post-tax price received by domestic apple producers
* Post-tax price received by foreign apple producers
Before we can answer that question, we need to ask an easier, first question: before instituting the tariff, why do apples cost $1?
And finally, before we dive into the details, let me provide you with the answers to the ultimate question. I recommend you try to guess these answers before reading this, and if you get it wrong, try to understand why:
1. The number of apples bought will go down
2. The buyers will pay more for each apple they buy, but not the full amount of the tariff
3. Domestic apple sellers will receive a *higher* price per apple
4. Foreign apple sellers will receive a *lower* price per apple, but not lowered by the full amount of the tariff
In other words, regardless of who sends the payment to the government, both taxed parties (domestic buyers and foreign sellers) will absorb some of the costs of the tariff, while domestic sellers will benefit from the protectionism provided by tariffs and be able to sell at a higher price per unit.
## Marginal benefit
All of the numbers discussed below are part of a [helper Google Sheet](https://docs.google.com/spreadsheets/d/14ZbkWpw1B9Q1UDB9Yh47DmdKQfIafVVBKbDUsSIfGZw/edit?usp=sharing) I put together for this analysis. Also, apologies about the jagged lines in the charts below, I hadn’t realized before starting on this that there are [some difficulties with creating supply and demand charts in Google Sheets](https://superuser.com/questions/1359731/how-to-create-a-supply-demand-style-chart).
Let’s say I absolutely love apples, they’re my favorite food. How much would I be willing to pay for a single apple? You might say “$1, that’s the price in the supermarket,” and in many ways you’d be right. If I walk into supermarket A, see apples on sale for $50, and know that I can buy them at supermarket B for $1, I’ll almost certainly leave A and go buy at B.
But that’s not what I mean. What I mean is: how high would the price of apples have to go *everywhere* so that I’d no longer be willing to buy a single apple? This is a purely personal, subjective opinion. It’s impacted by how much money I have available, other expenses I need to cover, and how much I like apples. But let’s say the number is $5.
How much would I be willing to pay for another apple? Maybe another $5. But how much am I willing to pay for the 1,000th apple? 10,000th? At some point, I’ll get sick of apples, or run out of space to keep the apples, or not be able to eat, cook, and otherwise preserve all those apples before they rot.
The point being: I’ll be progressively willing to spend less and less money for each apple. This form of analysis is called *marginal benefit*: how much benefit (expressed as dollars I’m willing to spend) will I receive from each apple? This is a downward sloping function: for each additional apple I buy (quantity demanded), the price I’m willing to pay goes down. This is what gives my personal *demand curve*. And if we aggregate demand curves across all market participants (meaning: everyone interested in buying apples), we end up with something like this:
![Demand curve before tax](https://www.snoyman.com/img/who-pays-tax/demand-before-tariff.png)
Assuming no changes in people’s behavior and other conditions in the market, this chart tells us how many apples will be purchased by our buyers at each price point between $0.50 and $5. And ceteris paribus (all else being equal), this will continue to be the demand curve for apples.
## Marginal cost
Demand is half the story of economics. The other half is supply, or: how many apples will I sell at each price point? Supply curves are upward sloping: the higher the price, the more a person or company is willing and able to sell a product.
Let’s understand why. Suppose I have an apple orchard. It’s a large property right next to my house. With about 2 minutes of effort, I can walk out of my house, find the nearest tree, pick 5 apples off the tree, and call it a day. 5 apples for 2 minutes of effort is pretty good, right?
Yes, there was all the effort necessary to buy the land, and plant the trees, and water them… and a bunch more than I likely can’t even guess at. We’re going to ignore all of that for our analysis, because for short-term supply-and-demand movement, we can ignore these kinds of *sunk costs*. One other simplification: in reality, supply curves often start descending before ascending. This accounts for achieving efficiencies of scale after the first number of units purchased. But since both these topics are unneeded for understanding taxes, I won’t go any further.
Anyway, back to my apple orchard. If someone offers me $0.50 per apple, I can do 2 minutes of effort and get $2.50 in revenue, which equates to a $75/hour wage for me. I’m more than happy to pick apples at that price\!
However, let’s say someone comes to buy 10,000 apples from me instead. I no longer just walk out to my nearest tree. I’m going to need to get in my truck, drive around, spend the day in the sun, pay for gas, take a day off of my day job (let’s say it pays me $70/hour). The costs go up significantly. Let’s say it takes 5 days to harvest all those apples myself, it costs me $100 in fuel and other expenses, and I lose out on my $70/hour job for 5 days. We end up with:
* Total expenditure: $100 \+ $70 \* 8 hours a day \* 5 days \== $2900
* Total revenue: $5000 (10,000 apples at $0.50 each)
* Total profit: $2100
So I’m still willing to sell the apples at this price, but it’s not as attractive as before. And as the number of apples purchased goes up, my costs keep increasing. I’ll need to spend more money on fuel to travel more of my property. At some point I won’t be able to do the work myself anymore, so I’ll need to pay others to work on the farm, and they’ll be slower at picking apples than me (less familiar with the property, less direct motivation, etc.). The point being: at some point, the number of apples can go high enough that the $0.50 price point no longer makes me any money.
This kind of analysis is called *marginal cost*. It refers to the additional amount of expenditure a seller has to spend in order to produce each additional unit of the good. Marginal costs go up as quantity sold goes up. And like demand curves, if you aggregate this data across all sellers, you get a supply curve like this:
![Supply curve before tariff](https://www.snoyman.com/img/who-pays-tax/supply-before-tariff.png)
## Equilibrium price
We now know, for every price point, how many apples buyers will purchase, and how many apples sellers will sell. Now we find the equilibrium: where the supply and demand curves meet. This point represents where the marginal benefit a buyer would receive from the next buyer would be less than the cost it would take the next seller to make it. Let’s see it in a chart:
![Supply and demand before tariff](https://www.snoyman.com/img/who-pays-tax/supply-demand-before-tariff.png)
You’ll notice that these two graphs cross at the $1 price point, where 63 apples are both demanded (bought by consumers) and supplied (sold by producers). This is our equilibrium price. We also have a visualization of the *surplus* created by these trades. Everything to the left of the equilibrium point and between the supply and demand curves represents surplus: an area where someone is receiving something of more value than they give. For example:
* When I bought my first apple for $1, but I was willing to spend $5, I made $4 of consumer surplus. The consumer portion of the surplus is everything to the left of the equilibrium point, between the supply and demand curves, and above the equilibrium price point.
* When a seller sells his first apple for $1, but it only cost $0.50 to produce it, the seller made $0.50 of producer surplus. The producer portion of the surplus is everything to the left of the equilibrium point, between the supply and demand curves, and below the equilibrium price point.
Another way of thinking of surplus is “every time someone got a better price than they would have been willing to take.”
OK, with this in place, we now have enough information to figure out how to price in the tariff, which we’ll treat as a negative externality.
## Modeling taxes
Alright, the government has now instituted a $0.50 tariff on every apple sold within the US by a foreign producer. We can generally model taxes by either increasing the marginal cost of each unit sold (shifting the supply curve up), or by decreasing the marginal benefit of each unit bought (shifting the demand curve down). In this case, since only some of the producers will pay the tax, it makes more sense to modify the supply curve.
First, let’s see what happens to the foreign seller-only supply curve when you add in the tariff:
![Foreign supply shift from tariff](https://www.snoyman.com/img/who-pays-tax/supply-tariff-shift.png)
With the tariff in place, for each quantity level, the price at which the seller will sell is $0.50 higher than before the tariff. That makes sense: if I was previously willing to sell my 82nd apple for $3, I would now need to charge $3.50 for that apple to cover the cost of the tariff. We see this as the tariff “pushing up” or “pushing left” the original supply curve.
We can add this new supply curve to our existing (unchanged) supply curve for domestic-only sellers, and we end up with a result like this:
![Supply curves post tariff](https://www.snoyman.com/img/who-pays-tax/supply-curves-post-tariff.png)
The total supply curve adds up the individual foreign and domestic supply curves. At each price point, we add up the total quantity each group would be willing to sell to determine the total quantity supplied for each price point. Once we have that cumulative supply curve defined, we can produce an updated supply-and-demand chart including the tariff:
![Supply and demand post tariff](https://www.snoyman.com/img/who-pays-tax/supply-demand-post-tariff.png)
As we can see, the equilibrium has shifted:
* The equilibrium price paid by consumers has risen from $1 to $1.20.
* The total number of apples purchased has dropped from 63 apples to 60 apples.
* Consumers therefore received 3 less apples. They spent $72 for these 60 apples, whereas previously they spent $63 for 3 more apples, a definite decrease in consumer surplus.
* Foreign producers sold 36 of those apples (see the raw data in the linked Google Sheet), for a gross revenue of $43.20. However, they also need to pay the tariff to the US government, which accounts for $18, meaning they only receive $25.20 post-tariff. Previously, they sold 42 apples at $1 each with no tariff to be paid, meaning they took home $42.
* Domestic producers sold the remaining 24 apples at $1.20, giving them a revenue of $28.80. Since they don’t pay the tariff, they take home all of that money. By contrast, previously, they sold 21 apples at $1, for a take-home of $21.
* The government receives $0.50 for each of the 60 apples sold, or in other words receives $30 in revenue it wouldn’t have received otherwise.
We could be more specific about the surpluses, and calculate the actual areas for consumer surplus, producer surplus, inefficiency from the tariff, and government revenue from the tariff. But I won’t bother, as those calculations get slightly more involved. Instead, let’s just look at the aggregate outcomes:
* Consumers were unquestionably hurt. Their price paid went up by $0.20 per apple, and received less apples.
* Foreign producers were also hurt. Their price received went down from the original $1 to the new post-tariff price of $1.20, minus the $0.50 tariff. In other words: foreign producers only receive $0.70 per apple now. This hurt can be mitigated by shifting sales to other countries without a tariff, but the pain will exist regardless.
* Domestic producers scored. They can sell less apples and make more revenue doing it.
* And the government walked away with an extra $30.
Hopefully you now see the answer to the original questions. Importantly, while the government imposed a $0.50 tariff, neither side fully absorbed that cost. Consumers paid a bit more, foreign producers received a bit less. The exact details of how that tariff was split across the groups is mediated by the relevant supply and demand curves of each group. If you want to learn more about this, the relevant search term is “price elasticity,” or how much a group’s quantity supplied or demanded will change based on changes in the price.
## Other taxes
Most taxes are some kind of a tax on trade. Tariffs on apples is an obvious one. But the same applies to income tax (taxing the worker for the trade of labor for money) or payroll tax (same thing, just taxing the employer instead). Interestingly, you can use the same model for analyzing things like tax incentives. For example, if the government decided to subsidize domestic apple production by giving the domestic producers a $0.50 bonus for each apple they sell, we would end up with a similar kind of analysis, except instead of the foreign supply curve shifting up, we’d see the domestic supply curve shifting down.
And generally speaking, this is what you’ll *always* see with government involvement in the economy. It will result in disrupting an existing equilibrium, letting the market readjust to a new equilibrium, and incentivization of some behavior, causing some people to benefit and others to lose out. We saw with the apple tariff, domestic producers and the government benefited while others lost.
You can see the reverse though with tax incentives. If I give a tax incentive of providing a deduction (not paying income tax) for preschool, we would end up with:
* Government needs to make up the difference in tax revenue, either by raising taxes on others or printing more money (leading to inflation). Either way, those paying the tax or those holding government debased currency will pay a price.
* Those people who don’t use the preschool deduction will receive no benefit, so they simply pay a cost.
* Those who do use the preschool deduction will end up paying less on tax+preschool than they would have otherwise.
This analysis is fully amoral. It’s not saying whether providing subsidized preschool is a good thing or not, it simply tells you where the costs will be felt, and points out that such government interference in free economic choice does result in inefficiencies in the system. Once you have that knowledge, you’re more well educated on making a decision about whether the costs of government intervention are worth the benefits.
-
![](/static/nostr-icon-purple-64x64.png)
@ 54286b98:3debc100
2025-02-03 20:55:10
Hello! Three years ago, I created a special bed for my daughter. I'm thrilled to share a detailed video and PDF documenting the process along with hopes to inspire you to embark on a similar project!
*\*\*\*This is a first and also a test to see how I can upload #woodworking material on Nostr. I am not sure how the links, images, and PDFs will display, so hopefully, you get some interesting material for your late afternoon hobby shop. But don’t kill me if some images do not render well—I’m still figuring this thing out!*
**Montessori Bed Plans / Blueprints**
The accompanying PDF includes:
- All measurements
- Detailed views from every angle
- Final measurements part list
- Assembly steps
### Instructive Video! Process on how to make the Montessori bed
Video Here:
<https://vimeo.com/901623772/b8b5530386>
PDF Here(Picture below,and if some one has good tip on how to inset PDFs in Nostr, that feedback is welcome, to avoid Google links):
<https://drive.google.com/file/d/1zCp1RvKOynx5kZxixAKSFLLOe8atyiRH/>
OK, let's dive in!
The Montessori bed featured in this video is not only simple but also durable, and you can create it on a budget right in your own home.OK, let's dive in!
**Tools by hand:**
- Circular saw
- Jointer Plane #7 or #8
- Spokeshave
- Workbench
- Handsaw
- Orbital sander
- Sandpaper #80, #120, #220, and #320
- Odies Oil or your preferred finish.
If you have power tools:
- Table Saw
- Jointer
- Planer
- Trimmer
**Materials:**\
I recommend using this list as a guide and exploring options with your local supplier.
- Base long connector (On picture "Larguero Base"): Quantity x 2, 2195mm x 75mm x 75mm
- Base short connector (On picture "Conector Base"): Quantity x 1, 1090mm x 75mm x 75mm
- Roof connector (On picture "Cumbre"): Quantity x 1, 1946mm x 75mm x 75mm
- Long top triangle connector (On picture "Conector Superior"): Quantity x 2, 1322mm x 75mm x 75mm
- Columns/Legs (On picture "Paral"): Quantity x 4, 1210mm x 75mm x 75mm
- Short top triangle connector (On picture "Lima"): Quantity x 4, 851mm x 75mm x 75mm
![](https://www.javierfeliu.com/content/images/2023/12/Materiales-1.png)**Step #1 Dimensioning (Minutes 0:00 - 1:15):**\
We kick off with dimensioning. While I initially planned to use my home workshop, unforeseen circumstances led me to my friend Andrew's workshop. Each beam was carefully brought down to 7.5 cm x 7.5 cm, ensuring the largest measurement that worked for all.
**Step #2 Final Measurements (No video):**\
Refer to the provided PDF for final measurements. Make the cuts and joints with a circular saw and chisels (or a router).
**Step #3 Edges (Minutes 1:15 - 1:30):**\
Use a router with a quarter-round bit for curved and smooth edges or achieve the same result with sandpaper or a spokeshave plane.
**Step #4 Triangular Bases (Minutes 1:30 - 6:30):**\
This step involves gluing the triangular bases of the bed, utilizing a miter joint with wooden inlay keys. Epoxy is employed for joining, ensuring a swift and reliable outcome.
**Step #5 Legs (Minutes 6:30 - 7:00):**\
Create holes for the upper triangular base's dowels, ensuring level placement and extra depth. This step guarantees a secure fit.
**Step #6 Sanding (Minutes 7:00 - 7:30):**\
Comprehensive sanding, starting from #80 grit and progressing through #120, #220, and #320, sets the stage for a flawless finish.
**Step #7 Dry Assembly (Minutes 7:30 - 9:10):**\
Dry-assemble all components, making necessary adjustments for a seamless fit. We opted for wood screws for easy disassembly.
**Step #8 Finishing (Minutes 9:10 - 9:35):**\
Apply your preferred finish; in our case, we used Odies Oil with white pigment for a child-friendly touch.
**Step #9 Final Assembly (Minutes 9:35 - 10:32):**\
With the finishing touches completed, we assembled the bed with the help of my daughter, adding a touch of warmth with some lights.
Testing with this simple project to at least know if there are woodworkers in #nostr. Later will try to upload more, this was created almost 3 years ago :)
Until the next one,
J\
\
PDF in pictures:
<img src="https://blossom.primal.net/4428f10f596666e5c059ba0fff65225babece6580372facb4bb191c60ef8d1b9.png">
<img src="https://blossom.primal.net/98997bd28bd89c0d549562851433891442694885c3e1e1d723e4a3abb1115540.png">
<img src="https://blossom.primal.net/b502fd666ea4931f2f36bfaf1375657a9b061198d617b04f6d659bce8f6c8026.png">
<img src="https://blossom.primal.net/3d04af7a4ba47f8aef60f5373d516d28dc81dee1a89c52111ee67207394d1892.png">
<img src="https://blossom.primal.net/c82bd1f8b71ae90c663eab4895934b07918c6805edb3772cd5a128a331d34546.png">
<img src="https://blossom.primal.net/53d7270b411edc6348239565bb6a922882c67b99f7095451dff740fd9e45e2d1.png">
<img src="https://blossom.primal.net/d8880757c95ba9884f81689e132f61cf1b47d91e16fd86de0c20b4ccfe790a30.png">
<img src="https://blossom.primal.net/2a6eb32e75a4d2756e5ad1cadc9153f30981261c5818e79f3b22988a5ea2228e.png">
<img src="https://blossom.primal.net/1d9ce880f97bbe950f80a8d49b546880a97123ca4a338c928017fc5098061206.png">
<img src="https://blossom.primal.net/092ba04779cef40f3b25e64536354c8fe929281082c2814de5c0b8ee0af0f66e.png">
<img src="https://blossom.primal.net/48202633a0fa6ba9096fbe22ab917aa8cb1f1b2b387e7c99f2f46bed4e691be8.png">
<img src="https://blossom.primal.net/b950522e349959508996f306168626e2df81f8cb8808d51cb9d25bd6edb6d8a6.png">
<img src="https://blossom.primal.net/7fd4a5ef8af567ba95fefe0c9457d8a49a67df19d83715d6b49d91ccc5ed75e5.png">
<img src="https://blossom.primal.net/a90c2cc18da6b7f7ca5e43d8fee2e1b0e44f7b7a5a2a5309a7e67fdec3fc408c.png">
<img src="https://blossom.primal.net/1d02f7cde847e8bd9b02a13f4ab27495dc494d8024d2d986e74fb26a280644b8.png">
<img src="https://blossom.primal.net/cb3065c27b10d9f918646db5f8a423b96af12f666c328709b4a9bca0e366ed02.png">
<img src="https://blossom.primal.net/7eae8a7f48b295a51081072f5318f62de2d137ba587c61998e4fcda09aa9be9e.png">
<img src="https://blossom.primal.net/155453317832749089c430aef677a67b20bd535178805b43e4b3679bdde0a47a.png">
<img src="https://blossom.primal.net/fdd1d866adc7986469c202e14f1048cb84ee59a43d584c539e4acdfe21dc92b7.png">
<img src="https://blossom.primal.net/4088b662379e928c835335639a14dc216f07dd34671ce5506be0d0b273d6cfec.png">
-
![](/static/nostr-icon-purple-64x64.png)
@ 378562cd:a6fc6773
2025-02-02 18:58:38
## Chef's notes
I'm only testing this out right now. I will update the recipe as well as add my own image soon after making this dish again.
## Details
- ⏲️ Prep time: 20 minutes
- 🍳 Cook time: 1 hour
- 🍽️ Servings: 4
## Ingredients
- 4 to 6 potatoes (size depending)
- 1 lb ground beef
- seasonings
- 2 cans chili beans
- 1 onion
- katsup
- shredded cheese of some kind
## Directions
1. saute onion and add ground beef to skillet. Season to liking.
2. peel if you like and thin slice potatoes
3. in a rectangle baking dish, layer potatoes, beans, meat and cheese (like a lasagna) until you have used all your ingredients. Try and make at least 2 or 3 layers with extra cheese on top.
4. Bake at 350 for one hour. Serve and enjoy!
-
![](/static/nostr-icon-purple-64x64.png)
@ 228dde34:b5d0345e
2025-02-02 10:00:02
##### By Cheryl Nya
##### Deputy Editor
##### Hype Issue #60
###### CHERYL NYA explores how diverse travel styles can blend seamlessly on a grad trip, turning every moment into an opportunity for unforgettable memories and shared adventures.
![image](https://yakihonne.s3.ap-east-1.amazonaws.com/228dde34601a35313a505841487a3ba14c015da4f115f6e7ea7b9141b5d0345e/files/1738488108071-YAKIHONNES3.jpg) *‘Grad trips’, taking a celebratory trip after graduation, have become a growing trend. Photo taken from Pinterest.*
You made it – years of studying, late-night cramming, and navigating deadlines have finally paid off. Now, it’s time for a well-earned break: the graduation trip. The perfect chance to celebrate with your closest friends before everyone heads off in different directions.
It sounds like the golden plan, but as exciting as it is, travelling in a group can be its own kind of challenge. Between different travel styles, budgets and energy levels, it’s easy for tensions to rise.
However, with a little flexibility and compromise, your long-awaited trip will be remembered for its remarkable memories rather than its unfortunate disagreements. Here’s your ultimate guide to coexisting with your travel crew, without losing your patience along the way.
![image](https://yakihonne.s3.ap-east-1.amazonaws.com/228dde34601a35313a505841487a3ba14c015da4f115f6e7ea7b9141b5d0345e/files/1738488139666-YAKIHONNES3.jpg) *Have an honest talk with your crew and set expectations before you head off. Photo taken from Pinterest.*
1. Recognise that everyone has their own travel personality
There’s the ‘Itinerary Enthusiasts’ who have every minute planned. Then there’ll be the ‘Go with the flow’ travellers who are just there for chill vibes. Somewhere in between you’ve got the foodies, the shopaholics, and the one who just wants a good Instagram shot. When travelling with others, it’s unlikely that all of your friends have the same travel personality. Accepting these different travel personalities early on before your trip will help you avoid major clashes – or at least mentally prepare for them. By recognising your group dynamics, you’ll know who to trust with planning and who to expect last-minute cancellations from.
2. Budget talks are awkward… but necessary
No one wants to be the person who suggests skipping a fancy dinner because they’re on a budget—but at the same time, no one wants to be forced into penny-pinching when they’re on this trip to indulge. Before the trip, have an honest conversation about spending expectations. Will you be splurging on expensive restaurants, or will street food and convenience stores be the way to go? Is everyone okay with taxis, or are we strictly on a public transport budget? Setting clear expectations upfront avoids unnecessary tension when the bill arrives.
3. The accommodation debate: Choose wisely
If your crew has a mix of early risers and night owls, staying in one cramped hostel room will definitely lead to chaos. Hence your choice of accommodation is extremely important; it could make or break your trip. Keep in mind, your light sleepers will suffer if your party-loving friends stumble in at 3AM. So, booking an Airbnb with separate rooms and beds might be your best option. Consider everyone’s preferences before booking because once you’re stuck in a bad setup, there’s no escaping it.
4. Embrace the art of splitting up
Not everyone wants to visit museums, and not everyone wants to be under the hot sun on a jet ski. Instead of dragging each other to activities not everyone is excited about, embrace the idea of splitting up for a day or two. If one group wants to go sightseeing at a historical site and the other wants to surf some waves, that’s okay! Just make sure to have a designated meetup location and time, and keep each other posted. This will keep everyone happy and mean that no one has to fake any enthusiasm for something they don’t enjoy.
5. Be honest about your limits
It’s very tempting to go along with every plan to avoid seeming difficult. But, if you’re not careful, that’s a fast track to burnout. Remember, this is your grad trip too. If you need some downtime before an afternoon of exploring, take it. If you hate hiking, skip it instead of forcing yourself through. Your friends would rather you be honest than silently endure something you don’t enjoy. Grad trips are meant to be fun–so speak up and prioritise what will make your experience enjoyable.
6. Most importantly, embrace the chaos and remember why you came
No matter how well you plan, things will go wrong. A “quick” coffee run might turn into a two-hour detour, or a carefully planned itinerary could be derailed by a sudden downpour. Maybe the group gets on the wrong train and ends up in an entirely different city. Sometimes, the best memories come from unplanned moments–so lean into the chaos and let the adventure unfold.
At the end of the day, this trip isn’t about checking off every attraction or getting the perfect itinerary; it’s about celebrating a huge milestone with the people who made those long nights and tough exams bearable. The best part of the trip won’t be the landmarks or the food; it’ll be the inside jokes, the late-night talks, and the shared moments of pure chaos. So, take a deep breath, go with the flow, and make the most of it.
![image](https://yakihonne.s3.ap-east-1.amazonaws.com/228dde34601a35313a505841487a3ba14c015da4f115f6e7ea7b9141b5d0345e/files/1738488280275-YAKIHONNES3.jpg) *No trip is perfect, but what’s important is the time spent with your company. Photo taken from Pinterest.*
Surviving a grad trip with different travel styles isn’t about avoiding conflict, it’s about embracing the madness and making the best of it. And hey, worst case? You’ll have some hilarious group chat stories to reminisce about later.
-
![](/static/nostr-icon-purple-64x64.png)
@ 57d1a264:69f1fee1
2025-02-02 05:47:57
Hey there, as a result of the recent [SN Media Kit](https://stacker.news/items/872925/r/Design_r) updated, I'll try to create few simple marketing assets for ~Stackers_Stocks territory to be spread across the web.
Feel free to share in the comments below:
- Few visual references you'd like the assets to be inspired on
- If visuals are not your thing, a description of your idea will help too
- A slogan, or some words/concepts that express the territory's values
@BlokchainB you start, let's see how we go!
originally posted at https://stacker.news/items/873112
-
![](/static/nostr-icon-purple-64x64.png)
@ 57d1a264:69f1fee1
2025-02-02 00:03:39
![](https://m.stacker.news/75774)
Welcome to the latest updated version of **Stacker News Media Kit & Brand Guidelines `v1.2`**, a pivotal location where all the visual elements find place and help us understand how to use them to have our communications cohesive. SN brand identity is built on simplicity, trust, innovation and a taste of Texas's Wild West. With the following guidelines, as [promised](https://stacker.news/items/855556/r/Design_r?commentId=855753), I'll try to outline the essential elements of SN visual language to be easily usable internally and externally.
As third interaction from the previous [discussion](https://stacker.news/items/786223), here below you will find all the media assets in PNG and SVG downloadable from this [zip file](https://nosto.re/0a8b02224c970de78fba3a0195dcf1ee44d18925ba941724497173b2bcbab901.zip). BTW: I've been using **`Nostr`** 🌸 **Blossom Serverservers** [check them out](https://blossomservers.com/), it's a really cool idea! In case the file will be not available we can always upload it in other servers. Just let me know if any issue downloading it, ideally I made three copies available from:
- https://nosto.re/0a8b02224c970de78fba3a0195dcf1ee44d18925ba941724497173b2bcbab901.zip
- https://blossom.poster.place/0a8b02224c970de78fba3a0195dcf1ee44d18925ba941724497173b2bcbab901.zip
- https://nostr.download/0a8b02224c970de78fba3a0195dcf1ee44d18925ba941724497173b2bcbab901.zip
The source file of all these assets still are the same [Figma file](https://www.figma.com/design/ZL3FLItd9j48pzKVi4qlOy/Stacker.News-Media-Kit?node-id=3-16&t=oEbUcC1tmLDRXgdH-0) and the [PenPot file](https://design.penpot.app/#/workspace/7ad540b5-8190-815d-8005-5685b9c670bc/7ad540b5-8190-815d-8005-5685c186216e?page-id=2643bc5a-0d34-80b2-8005-58099eabda41). This last one, has many issues and does not allow yet the same flexibility as Figma. Both files are open for contributions and comments, just need to register a dummy/anonymous account for each of the tools.
> **Note:** To use these assets across SN, just copy-paste the image relative code, i.e.:
![](https://m.stacker.news/75773)
# Stacker News Logotype
SN logo is the most recognizable visual identifier of Stacker News. It captures the essence of its brand and is to be used across the platform and other marketing materials **consistently**. Find below all the possible variations and colors. Ideally you should stick with it to maintain SN identity coherent, or propose something new if you feel like. If you have any question on how to place or use the logo, DO ask below, and we'll help sort it out.
| Avatar on transparent BG | Avatar on BG | Logo Extended | Logo Vertical |#|
|---|---|---|---|---|
| ![](https://m.stacker.news/75562) `![](https://m.stacker.news/75562)` | ![](https://m.stacker.news/75552) `![](https://m.stacker.news/75552)` | ![](https://m.stacker.news/75555) `![](https://m.stacker.news/75555)`| ![](https://m.stacker.news/75566) `![](https://m.stacker.news/75566)` |Oil Black|
| ![](https://m.stacker.news/75564) `![](https://m.stacker.news/75564)` | ![](https://m.stacker.news/75554) `![](https://m.stacker.news/75554)` | ![](https://m.stacker.news/75557) `![](https://m.stacker.news/75557)` | ![](https://m.stacker.news/75567) `![](https://m.stacker.news/75567)`| Golden Yellow |
| ![](https://m.stacker.news/75563) `![](https://m.stacker.news/75563)` | ![](https://m.stacker.news/75553) `![](https://m.stacker.news/75553)` | ![](https://m.stacker.news/75565) `![](https://m.stacker.news/75565)` | ![](https://m.stacker.news/75568) `![](https://m.stacker.news/75568)`|With Shadow |
# Stacker News Typography
![](https://m.stacker.news/75569)
This is the typography SN had used to create its logo. [Download LightningVolt OpenType Font file.otf](http://honeyanddeath.web.fc2.com/FontFile/honeyanddeath_Lightningvolt.zip) designed by **[Honey&Death](http://honeyanddeath.web.fc2.com/fnt_Lightningvolt.html)**, install it in your computer and play with it.
Typography is essential to identify, increase readability and create consistency of brands. SN uses the default `font-family:sans-serif;` of your device's OS, usually are the most common and already installed in your device: `system-ui, "Segoe UI", Roboto, "Helvetica Neue", "Noto Sans", "Liberation Sans", Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"`. Those are mostly used for:
# Example Header H1
## Example Header H2
### Example Header H3
#### Example Header H4
##### Example Header H5
**Example paragraph text**
The fonts selected will help to communicate the personality of the brand and provide maximum legibility for both print and screen.
`Example <code>`
For code, the approach is the same. Let's the device OS select its default `monospace` one. For example, on Mac will be one of the following:
```
SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New",`
```
# Stacker News Colors
A thoughtfully curated color palette gives SN trust, professionalism, and approachability. Colors play a key role in creating consistent visual experiences through digital and print communications. Make sure you are using the right color codes below:
| # | Name | HEX code | RGB code | HLS |
|---|---|---|---|---|
| ![](https://m.stacker.news/75602) | Bitcoin-only | `#F6911D` | `rgb(246,145,29)` | `hsl(32,92.3%,53.9%)` |
| ![](https://m.stacker.news/75590) | Blackr | `#000000` | `rgb(0,0,0)` | `hsl(0,0%,0%)` |
| ![](https://m.stacker.news/75591) | Dark | `#121214` | `rgb(18,18,20)` | `hsl(240,5.3%,7.5%)` |
| ![](https://m.stacker.news/75592) | Gold | `#FADA5E` | `rgb(250,218,94)` | `hsl(48,94%,67.5%)` |
| ![](https://m.stacker.news/75593) | Gray | `#969696` | `rgb(150,150,150)` | `hsl(0,0%,58.8%)` |
| ![](https://m.stacker.news/75594) | Light | `#F0F0F0` | `rgb(240,240,240)` | `hsl(0,0%,94.1%)` |
| ![](https://m.stacker.news/75595) | Nostrch | `#8C25F4` | `rgb(140,37,244)` | `hsl(270,90.4%,55.1%)` |
| ![](https://m.stacker.news/75596) | Pinkish | `#E685B5` | `rgb(230,133,181)` | `hsl(330,66%,71.2%)` |
| ![](https://m.stacker.news/75597) | Ruby | `#C03221` | `rgb(192,50,33)` | `hsl(6,70.7%,44.1%)` |
| ![](https://m.stacker.news/75598) | Sky Hover | `#007CBE` | `rgb(0,124,190)` | `hsl(201,100%,37.3%)` |
| ![](https://m.stacker.news/75599) | Sky Links | `#2E99D1` | `rgb(46,153,209)` | `hsl(201,63.9%,50%)` |
| ![](https://m.stacker.news/75600) | Sky Visited | `#56798E` | `rgb(86,121,142)` | `hsl(203,24.6%,44.7%)` |
| ![](https://m.stacker.news/75601) | So Fiat | `#5C8001` | `rgb(92,128,1)` | `hsl(77,98.4%,25.3%)` |
# Stacker News Icons
SN utilizes a set of bespoke icons that support its communication internally across the platform. Icons help bring instant, intuitive cues for various types of content and features. We share them here for you so you can use as you wish and satisfy your creative needs.
| ![Arrow](https://m.stacker.news/75605) `![Arrow](https://m.stacker.news/75605)` | ![Bell](https://m.stacker.news/75606) `![Bell](https://m.stacker.news/75606)` | ![Bounty](https://m.stacker.news/75607) `[Bounty](https://m.stacker.news/75607)` | ![Caret](https://m.stacker.news/75608) `[Caret](https://m.stacker.news/75608)` | ![Cowboy](https://m.stacker.news/75609) `[Cowboy](https://m.stacker.news/75609)` | ![Sun](https://m.stacker.news/75610) `[Sun](https://m.stacker.news/75610)` |
|---|---|---|---|---|---|
| ![Edit](https://m.stacker.news/75611) **`[Edit](https://m.stacker.news/75611)`** | ![Gun](https://m.stacker.news/75612) **`[Gun](https://m.stacker.news/75612)`** | ![Horse](https://m.stacker.news/75613) **`[Horse](https://m.stacker.news/75613)`** | ![Info](https://m.stacker.news/75614) **`[Info](https://m.stacker.news/75614)`** | ![Moon](https://m.stacker.news/75615) **`[Moon](https://m.stacker.news/75615)`** | ![Lightning](https://m.stacker.news/75616) **`[Lightning](https://m.stacker.news/75616)`**|
| ![Bald Lost Hat](https://m.stacker.news/75617) **`[Bald Lost Hat](https://m.stacker.news/75617)`**| ![Markdown](https://m.stacker.news/75618) **`[Markdown](https://m.stacker.news/75618)`**| ![Nostr](https://m.stacker.news/75619) **`[Nostr](https://m.stacker.news/75619)`**| ![Referral](https://m.stacker.news/75620) **`[Referral](https://m.stacker.news/75620)`**| ![Rewards](https://m.stacker.news/75621) **`[Rewards](https://m.stacker.news/75621)`**| ![Horse Lost Saddle](https://m.stacker.news/75622) **`[Horse Lost Saddle](https://m.stacker.news/75622)`**| ![Search](https://m.stacker.news/75623) **`[Search](https://m.stacker.news/75623)`** |
|![Shoot](https://m.stacker.news/75624) **`[Shoot](https://m.stacker.news/75624)`** |![Texas](https://m.stacker.news/75625) **`[Texas](https://m.stacker.news/75625)`** | ![Upload](https://m.stacker.news/75626) **`[Upload](https://m.stacker.news/75626)`** | ![Zap Zap](https://m.stacker.news/75627) **`[Zap Zap](https://m.stacker.news/75627)`** |||
# Stacker News Banners
Banners are important visual elements used in our digital platforms and marketing materials. They help to highlight key stories, features or announcements while maintaining our brand aesthetic.
Here below you'll find custom banners for Sn and for individial territories. I try to build those that I follow most, for now @AGORA is the only one that designed its own banners. Comment below if you'd like some banners for your territory!
#### SN Dark background
|970x250|
|---|
|![](https://m.stacker.news/75654) `![](https://m.stacker.news/75654` |
|250x250|300x250|300x600|
|---|---|---|
|![](https://m.stacker.news/75656)`![](https://m.stacker.news/75656)`|![](https://m.stacker.news/75657)`![](https://m.stacker.news/75657)`|![](https://m.stacker.news/75658)`![](https://m.stacker.news/75658)`|
|728x90|
|---|
| ![](https://m.stacker.news/75655) `![](https://m.stacker.news/75655)` |
#### SN Gold background
|970x250|
|---|
|![](https://m.stacker.news/75641)`![](https://m.stacker.news/75641)` |
|250x250|300x250|300x600|
|---|---|---|
|![](https://m.stacker.news/75645)`![](https://m.stacker.news/75645)` | ![](https://m.stacker.news/75646)`![](https://m.stacker.news/75646)` |![](https://m.stacker.news/75647)`![](https://m.stacker.news/75647)` |
|728x90|
|---|
|![](https://m.stacker.news/75648)`![](https://m.stacker.news/75648)` |
#### SN by @Jon_Hodl
|970x250|
|---|
| ![](https://m.stacker.news/75649)`![](https://m.stacker.news/75649)` |
|250x250|300x250|300x600|
|---|---|---|
| ![](https://m.stacker.news/75651)`![](https://m.stacker.news/75651)` | ![](https://m.stacker.news/75652) `![](https://m.stacker.news/75652)`| ![](https://m.stacker.news/75653)`![](https://m.stacker.news/75653)` |
|728x90|
|---|
|![](https://m.stacker.news/75650)`![](https://m.stacker.news/75650)` |
#### ~AGORA territory
The SN P2P Marketplace
|970x250|
|---|
| ![](https://m.stacker.news/75767)`![](https://m.stacker.news/75767)` |
|250x250|300x250|300x600|
|---|---|---|
| ![](https://m.stacker.news/75769)`![](https://m.stacker.news/75769)` | ![](https://m.stacker.news/75770)`![](https://m.stacker.news/75770)`|![](https://m.stacker.news/75771)`![](https://m.stacker.news/75771)`|
|728x90|
|---|
| ![](https://m.stacker.news/75768)`![](https://m.stacker.news/75768)`|
#### ~alter_native territory
|970x250|
|---|
| ![](https://m.stacker.news/75669)`![](https://m.stacker.news/75669)`|
|250x250|300x250|300x600|
|---|---|---|
|![](https://m.stacker.news/75671)`![](https://m.stacker.news/75671)`|![](https://m.stacker.news/75672)`![](https://m.stacker.news/75672)`|![](https://m.stacker.news/75673)`![](https://m.stacker.news/75673)`|
|728x90|
|---|
|![](https://m.stacker.news/75670)`![](https://m.stacker.news/75670)` |
#### ~bitcoin_beginners
|970x250|
|---|
| ![](https://m.stacker.news/75676)`![](https://m.stacker.news/75676)` |
|250x250|300x250|300x600|
|---|---|---|
| ![](https://m.stacker.news/75677)`![](https://m.stacker.news/75677)`|![](https://m.stacker.news/75678)`![](https://m.stacker.news/75678)`|![](https://m.stacker.news/75679)`![](https://m.stacker.news/75679)` |
|728x90|
|---|
| ![](https://m.stacker.news/75675)`![](https://m.stacker.news/75675)`|
#### ~Design territory
|970x250|
|---|
|![](https://m.stacker.news/75659)`![](https://m.stacker.news/75659)`|
|250x250|300x250|300x600|
|---|---|---|
|![](https://m.stacker.news/75661)`![](https://m.stacker.news/75661)`|![](https://m.stacker.news/75662)`![](https://m.stacker.news/75662)`|![](https://m.stacker.news/75663)`![](https://m.stacker.news/75663)`|
|728x90|
|---|
|![](https://m.stacker.news/75660)`![](https://m.stacker.news/75660)`|
#### ~Music territory
|970x250|
|---|
| ![](https://m.stacker.news/75664)`![](https://m.stacker.news/75664)`|
|250x250|300x250|300x600|
|---|---|---|
|![](https://m.stacker.news/75666)`![](https://m.stacker.news/75666)`|![](https://m.stacker.news/75667)`![](https://m.stacker.news/75667)`|![](https://m.stacker.news/75668)`![](https://m.stacker.news/75668)`|
|728x90|
|---|
| ![](https://m.stacker.news/75665)`![](https://m.stacker.news/75665)`|
# Anything else we could add?
If you feel something is missing, or you know a better tool to manage this media kit for SN in a collaborative and FOSS way then, DO share it in a comment below
Territory owners [^1], do you need banners for your territory? Feel free to edit the figma file liked above or comment below sharing your needs or ideas, I'll try to do something for you.
By following these guidelines, we ensure consistency and professionalism in every case where Stacker News is represented here internally to stackers or to our audience in the KYC internet, reinforcing SN credibility as a trusted source for data-driven journalism.
[^1]: FYI: @Aardvark @AGORA @anna @antic @AtlantisPleb @Bell_curve @benwehrman @bitcoinplebdev @Bitter @BlokchainB @ch0k1 @davidw @ek @elvismercury @frostdragon @grayruby @HODLR @inverselarp @Jon_Hodl @k00b @marks @MaxAWebster @mega_dreamer @niftynei @nout @OneOneSeven @OT @PlebLab @Public_N_M_E @RDClark @realBitcoinDog @roytheholographicuniverse @siggy47 @softsimon @south_korea_ln @theschoolofbitcoin @TNStacker @UCantDoThatDotNet @Undisciplined
originally posted at https://stacker.news/items/872925
-
![](/static/nostr-icon-purple-64x64.png)
@ a95c6243:d345522c
2025-01-31 20:02:25
*Im Augenblick wird mit größter Intensität, großer Umsicht* *\
das deutsche Volk belogen.* *\
Olaf Scholz im FAZ-[Interview](https://www.youtube.com/watch?v=c3KI1GmdoVc\&t=649s)*  
**Online-Wahlen stärken die Demokratie, sind sicher, und 61 Prozent der Wahlberechtigten** sprechen sich für deren Einführung in Deutschland aus. Das zumindest behauptet eine aktuelle Umfrage, die auch über die Agentur *Reuters* Verbreitung in den Medien [gefunden](https://archive.is/dnZbY) hat. Demnach würden außerdem 45 Prozent der Nichtwähler bei der Bundestagswahl ihre Stimme abgeben, wenn sie dies zum Beispiel von Ihrem PC, Tablet oder Smartphone aus machen könnten.
**Die telefonische Umfrage unter gut 1000 wahlberechtigten Personen** sei repräsentativ, [behauptet](https://www.bitkom.org/Presse/Presseinformation/Knapp-Haelfte-Nichtwaehler-wuerde-online-waehlen) der Auftraggeber – der Digitalverband Bitkom. Dieser präsentiert sich als eingetragener Verein mit einer beeindruckenden Liste von [Mitgliedern](https://www.bitkom.org/Bitkom/Mitgliedschaft/Mitgliederliste), die Software und IT-Dienstleistungen anbieten. Erklärtes Vereinsziel ist es, «Deutschland zu einem führenden Digitalstandort zu machen und die digitale Transformation der deutschen Wirtschaft und Verwaltung voranzutreiben».
**Durchgeführt hat die Befragung die Bitkom Servicegesellschaft mbH,** also alles in der Familie. Die gleiche Erhebung hatte der Verband übrigens 2021 schon einmal durchgeführt. Damals sprachen sich angeblich sogar 63 Prozent für ein derartiges [«Demokratie-Update»](https://www.experten.de/id/4922407/online-wahlen-als-update-des-demokratischen-systems/) aus – die Tendenz ist demgemäß fallend. Dennoch orakelt mancher, der Gang zur Wahlurne gelte bereits als veraltet.
**Die spanische Privat-Uni mit Globalisten-Touch, IE University, berichtete** Ende letzten Jahres in ihrer Studie «European Tech Insights», 67 Prozent der Europäer [befürchteten](https://www.ie.edu/university/news-events/news/67-europeans-fear-ai-manipulation-elections-according-ie-university-research/), dass Hacker Wahlergebnisse verfälschen könnten. Mehr als 30 Prozent der Befragten glaubten, dass künstliche Intelligenz (KI) bereits Wahlentscheidungen beeinflusst habe. Trotzdem würden angeblich 34 Prozent der unter 35-Jährigen einer KI-gesteuerten App vertrauen, um in ihrem Namen für politische Kandidaten zu stimmen.
**Wie dauerhaft wird wohl das Ergebnis der kommenden Bundestagswahl sein?** Diese Frage stellt sich angesichts der aktuellen Entwicklung der Migrations-Debatte und der (vorübergehend) bröckelnden «Brandmauer» gegen die AfD. Das «Zustrombegrenzungsgesetz» der Union hat das Parlament heute Nachmittag überraschenderweise [abgelehnt](https://www.bundestag.de/dokumente/textarchiv/2025/kw05-de-zustrombegrenzungsgesetz-1042038). Dennoch muss man wohl kein ausgesprochener Pessimist sein, um zu befürchten, dass die Entscheidungen der Bürger von den selbsternannten Verteidigern der Demokratie künftig vielleicht nicht respektiert werden, weil sie nicht gefallen.
**Bundesweit wird jetzt zu «Brandmauer-Demos» aufgerufen,** die CDU gerät unter Druck und es wird von Übergriffen auf Parteibüros und Drohungen gegen Mitarbeiter [berichtet](https://www.epochtimes.de/politik/deutschland/brandmauer-proteste-cdu-zentrale-geraeumt-kundgebungen-in-46-staedten-a5023745.html). Sicherheitsbehörden warnen vor Eskalationen, die Polizei sei «für ein mögliches erhöhtes Aufkommen von Straftaten gegenüber Politikern und gegen Parteigebäude sensibilisiert».
**Der Vorwand** **[«unzulässiger Einflussnahme»](https://transition-news.org/die-minister-faeser-und-wissing-sorgen-sich-um-unzulassige-einflussnahme-auf)** **auf Politik und Wahlen** wird als Argument schon seit einiger Zeit aufgebaut. Der Manipulation schuldig befunden wird neben Putin und Trump auch Elon Musk, was lustigerweise ausgerechnet Bill Gates gerade noch einmal bekräftigt und als [«völlig irre»](https://transition-news.org/bill-gates-nennt-musks-einmischung-in-eu-politik-vollig-irre) bezeichnet hat. Man stelle sich die Diskussionen um die Gültigkeit von Wahlergebnissen vor, wenn es Online-Verfahren zur Stimmabgabe gäbe. In der Schweiz wird [«E-Voting»](https://www.ch.ch/de/abstimmungen-und-wahlen/e-voting/) seit einigen Jahren getestet, aber wohl bisher mit wenig Erfolg.
**Die politische Brandstiftung der letzten Jahre zahlt sich immer mehr aus.** Anstatt dringende Probleme der Menschen zu lösen – zu denen auch in Deutschland die [weit verbreitete Armut](https://transition-news.org/ein-funftel-der-bevolkerung-in-deutschland-ist-von-armut-oder-sozialer) zählt –, hat die Politik konsequent polarisiert und sich auf Ausgrenzung und Verhöhnung großer Teile der Bevölkerung konzentriert. Basierend auf Ideologie und Lügen werden abweichende Stimmen unterdrückt und kriminalisiert, nicht nur und nicht erst in diesem Augenblick. Die nächsten Wochen dürften ausgesprochen spannend werden.
***
Dieser Beitrag ist zuerst auf ***[Transition News](https://transition-news.org/wahlen-und-wahlen-lassen)*** erschienen.
-
![](/static/nostr-icon-purple-64x64.png)
@ 54286b98:3debc100
2025-01-31 11:17:42
Mornings are good; they are better than evenings (except for sunset views).\
Your body is recharged.\
The mind should be more at ease.\
Worries should be fewer, and breakfast is the only meal that is "served all day."
Waking up early—very early—was normal (at least for me) a lifetime ago.\
You get more things done,\
it’s quiet and free of distractions.\
So why don’t we just wake up early anymore?
It would be easy to blame responsibilities and being tired for why we can't wake up earlier,\
but that’s an easy way out.\
I believe we stop trying to beat the sun when two things happen to us:\
We lose a ***big motivator*** (being competitive, learning something, getting more done, spiritual time, etc.).\
We fall for ***comfort*** and a life without the demands of growth.\
Each one follows the other, like a dog chasing its tail.
Today marks almost day 30 of waking up really early again. I am happier, healthier, more connected with God, learning new things every day, playing my guitar, and writing more.
Until the next one,
J
Get my email newsletter or read my blog at [javierfeliu.com](https://www.javierfeliu.com/) (Soon will work on setting up specific #Nostr page.
> *An independent, publication about crafting beauty in life, family,
> entrepreneurship, culture, woodworking, and faith, written by Javier
> Feliu.*
-
![](/static/nostr-icon-purple-64x64.png)
@ 5188521b:008eb518
2025-01-31 08:38:47
![](https://substackcdn.com/image/fetch/w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F862b33d8-d279-443a-936c-3ec4337dd7dc_6016x4016.jpeg)*Photo by [Pavel Danilyuk](https://www.pexels.com/photo/a-woman-holding-a-placard-8553778/)*
In the last four years, I’ve ridden the wave of social media. I’ve amassed thousands of followers, and my posts were read by millions.
It’s empowering… until it isn’t.
This year, I chose to stop publishing on LinkedIn, Medium, Facebook, Instagram, and Threads. My reach on each of these platforms dropped from 100% of my follower base to around 10%. My voice was being suppressed.
I wasn’t writing anything particularly controversial. This is all just part of the social media life cycle. Platforms offer attractive terms to lock in users. They distribute our articles, posts, and thoughts widely to attract eyeballs for advertisers.
Writers learn to play the algorithm to maximise reach and engagement. Maybe they even manage to monetize their writing.
But when the platforms reach what they deem to be maximum usage and membership, they begin to reduce the benefits on offer. They ask writers to focus on specific topics, suppress non-mainstream opinion, or punish or ban any writers who don’t follow new rules. Big tech companies always eventually turn on the money tap by forcing users to suffer endless adverts and even make writers pay to reach the audience they have built.
Newsflash: there is no company too big to fail. Digg, Google+, Myspace, Vine and many more socials have died. Self-reported active user numbers cannot be trusted. Meta recently trialed AI profiles to prop up falling usage projections on Instagram and Facebook. X is now a dumpster fire of bots, scammers, and rage bait. It has been co-opted by a megalomaniacal oligarch to spread his own worldview. And LinkedIn feeds are drowning in unsolicited AI-generated business twaddle. The social giants are entering the death spiral.
# What happens in a social-media death spiral?
Users don’t see the value in posting, so they move elsewhere.
I wasn’t feeling rewarded for the thousands of hours I spent on LinkedIn, so I quit. I went from earning $20+ an article on Medium to pennies. Literal pennies. Bye bye, Tony Stubblebine. I learned that if you don’t own the distribution mechanic, you get left writing into the wind.
Ultimately, writers will dedicate their energy to where they see a benefit. They should spend time and create value in the place most similar to their ideal world.
For writers in 2025, that place seems to be Substack. Open rates are high and the platform is adding social features to generate more engagement in app. Substack is [experiencing massive growth](https://backlinko.com/substack-users) in active (and paid) subscriptions. Yet, it is following the same pattern as Medium in and LinkedIn in become self-cannibalising. Many of the most popular accounts write about ‘how to grow’ or ‘how to make money’ on Substack. Queue the eye rolls.
For me, it’s not the promised land where writers can earn a living. Of course, it’s no walk in the park to earn paid subscribers. Further, Substack users can only receive payment via Stripe. This excludes writers from 149 of the World’s countries. Does that seem open and fair to you?
Even with all this going on, there is a much bigger factor that should influence your choice of platform — ownership.
# Do writers really own their words?
Who reads the terms and conditions? Nobody. That’s who.Writers (including me) rush to all platforms which promise to give us benefits such as pay, distribution, and audience growth.
In exchange, companies request access to and shared ownership of our content. They can use our words to train LLMs, analyse trends, repurpose, and to spy on us.
Governments can and will request access to social media profiles. They seek to control the use of those platforms. Founders and CEOs who refuse to comply may be held personally accountable and put on trial, just as [Telegram founder, Pavel Durov, was](https://www.bbc.com/news/articles/c78lgzl919go) in France. Big tech owns our content, and governments threaten platforms into obedience.
As much as it benefits society to suppress harmful or dangerous content, companies simply can’t be censors 24/7. Growing platforms like [Bluesky are already struggling to moderate content effectively](https://www.theregister.com/2024/12/02/bluesky_growing_problems/). Without a strong economic incentive to moderate, companies will simply refuse to do it (as long as the threat of criminal charges does not prevail).
To sum up: No privately owned social media network offers writers the opportunity to own and distribute their work in order to receive a fair and equitable benefit.
Enter NOSTR…
# Decentralizing Social Media
![](https://substackcdn.com/image/fetch/w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc3ae90de-a6c9-46b2-9a80-6e352ab002a1_2048x1449.jpeg)**Notes and Other Stuff Transmitted by Relays** (NOSTR) is not a platform; it’s an open protocol.
By signing messages with their private keys (a long string of characters), users generate “events”. These events (messages/updates/media/transactions) are then broadcast through a series of “relays.”
Developers can use the protocol to build various applications that retrieve and distribute these events to other users. These ‘clients’ can range from microblogging sites like X and long-form distributors like Substack to visual media platforms like Instagram. Plus, NOSTR is also a whole lot more than that (but this is a topic for another day).
Decentralized tools offer the only hope against the dominance of AI and big tech in a top-down autocratic system designed to control us more than the thought police ever could.
<img src="https://blossom.primal.net/93a44d9bfe3c768e41d8bfef52415131af3ca21814a23870a029f1a947288cc8.webp">
*Diagram courtesy of River.*
So why should writers opt out of their big audience pool to write on some ‘protocol’?
**Ownership, fair rules, and fair value.**
- **Ownership**:
While privately run corporations can suppress the ideas they want, NOSTR provides a censorship-resistant alternative. No individual actors can restrict content or accounts.
Your private keys provide **permanent access** to the messages you have signed. No one else has access to them. And while some clients provide a delete function, there is no way to force all relays to respect a delete request. Not only do writers own what they publish, but it’s a permanent record.
- **Rules:**
Traditional social media platforms use proprietary algorithms to curate and order our feeds. **NOSTR has no algorithm**. NOSTR clients display messages chronologically or based on user-defined criteria, removing the influence of opaque algorithms that could manipulate user engagement and visibility of posts.
Put simply, distribution and consumption is down to the user, not to the creator or the platform. And everyone works to the same rules.
- **Value:**
Harmful content and spam affect all of us. There is no way to stop malicious content from being published on NOSTR, but two factors control its consumption.
1. Clients are experimenting with strategies such as requiring proof-of-work with each note or requiring verification badges.
2. Quality control is enforced by the value transferred by the protocol.
Bitcoin micropayments have become the monetary lifeblood flowing in the decentralized world. The ability to ‘zap’ users actual monetary value (e.g. a few cents) provides a clear display of which messages are valuable and which are unwanted. In time, as more users adopt the mechanic of value transfer, spammers will see their approach is not bearing fruit.
The beauty of using bitcoin in this way is twofold. Firstly, it is truly equitable — anyone in the world can receive it instantly and it cannot be stopped. And the system of frictionless micropayments offers content creators (artists, podcasters, musicians, writers) a way to earn money for the value they produce. Put simply, this could save creativity from doom.
Think people still want all content for free? Think again. Try zapping a writer from the Philippines, an artist from Peru, a Congolese musician, or a poet from Poland to show them you enjoyed what they produced. THAT is truly empowering.
Not convinced?
The best thing about NOSTR for writers is that **you are early**.
By being an early adopter with a low time preference, you can build a sizeable audience as new users discover the protocol.
Of course, topics like bitcoin, freedom tech, and privacy are well covered, but if you write in another niche, you could be ‘quids in’.
# Conclusion:
By adopting a long-term strategy and sticking to their principles, readers, writers and all other creatives can build a better world on social media. It doesn’t matter that it is imperfect. There will always be flaws in any society. But decentralized protocols like NOSTR can offer writers what they truly want — ownership, fair rules, and fair value.
---
Philip Charter is a totally human writer who helps bitcoin-native companies and clients stack major gains through laser-focused content. Find out more at [totallyhumanwriter.com](https://totallyhumanwriter.com)
He is also the editor of the cypherpunk and freedom fiction project, [21 Futures](https://21futures.com).