Releases: TodePond/DreamBerd
The Real Truth About DreamBerd
Last week, we revealed the truth about DreamBerd:
DreamBerd's true purpose is to make fun of JavaScript. Just look at this abomination:
typeof NaN === "number"
Yeah, you read that right. JavaScript thinks that 'not a number' is a 'number'. You probably didn't know this.
That's the kind of high level satire you can expect from DreamBerd.
Except... That's not the truth. Here's the real truth:
The Real Truth About DreamBerd
DreamBerd's true purpose is to make fun of people who make fun of JavaScript. Just look at this abomination:
Just look at this abomination.
typeof NaN === "number"
Yeah, you read that right. JavaScript thinks that 'not a number' is a 'number'. You probably didn't know this.
Yeah, you read that right. They think that 'not a number' is 'not a number'. But 'not a number' is a 'number' as part of the IEFFFF spec. You probably didn't know this.
That's the kind of high level satire you can expect from DreamBerd.
Except... That's not the truth. Here's the real truth:
The Real Truth About DreamBerd
DreamBerd's true purpose is to make fun of people who make fun of people who make fun of JavaScript. Just look at this abomination:
Just look at this abomination:
Just look at this abomination.
typeof NaN === "number"
Yeah, you read that right. JavaScript thinks that 'not a number' is a 'number'. You probably didn't know this.
Yeah, you read that right. They think that 'not a number' is 'not a number'. But 'not a number' is a 'number' as part of the IEFFFF spec. You probably didn't know this.
Yeah, you read that right. They think that 'not a number' is a 'number'. But if you look closely at the name of 'not a number', you'll notice that it says 'not a number', not 'a number'. You probably didn't know this.
That's the kind of high level satire you can expect from DreamBerd.
Except... That's not the truth. Here's the real truth:
The Real Truth About DreamBerd
DreamBerd's true purpose is to make fun of people who make fun of people who make fun of people who make fun JavaScript. Just look at this abomination:
Just look at this abomination:
Just look at this abomination:
Just look at this abomination.
typeof NaN === "number"
Yeah, you read that right. JavaScript thinks that 'not a number' is a 'number'. You probably didn't know this.
Yeah, you read that right. They think that 'not a number' is 'not a number'. But 'not a number' is a 'number' as part of the IEFFFF spec. You probably didn't know this.
Yeah, you read that right. They think that 'not a number' is a 'number'. But if you look closely at the name of 'not a number', you'll notice that it says 'not a number', not 'a number'. You probably didn't know this.
Yeah, you read that right. They think that 'not a number' is 'not a number' as if any of this matters. When push comes to shove, our reality has no meaning, and there's no point in arguing about anything. You probably didn't know that.
That's the kind of high level satire you can expect from DreamBerd.
Except... That's not the truth. Here's the real truth:
The Real Truth About DreamBerd
DreamBerd's true purpose is to make fun of people who make fun of people who make fun of people who make fun of people who make fun of JavaScript. Just look at this abomination:
Just look at this abomination:
Just look at this abomination:
Just look at this abomination:
Just look at this abomination.
typeof NaN === "number"
Yeah, you read that right. JavaScript thinks that 'not a number' is a 'number'. You probably didn't know this.
Yeah, you read that right. They think that 'not a number' is 'not a number'. But 'not a number' is a 'number' as part of the IEFFFF spec. You probably didn't know this.
Yeah, you read that right. They think that 'not a number' is a 'number'. But if you look closely at the name of 'not a number', you'll notice that it says 'not a number', not 'a number'. You probably didn't know this.
Yeah, you read that right. They think that 'not a number' is 'not a number' as if any of this matters. When push comes to shove, our reality has no meaning, and there's no point in arguing about anything. You probably didn't know that.
Yeah, you read that right. They think that nothing matters. But they could just go outside and touch grass. If they went to the gym, or created a child as soon as possible, they'd find meaning in their life. You probably didn't know this.
That's the kind of high level satire you can expect from DreamBerd.
Except... That's not the truth. Here's the real truth:
The Real Truth About DreamBerd
DreamBerd's true purpose is to make fun of people who make fun of people who make fun of people who make fun of people who make fun of people who make fun of JavaScript. Just look at this abomination:
Just look at this abomination:
Just look at this abomination:
Just look at this abomination:
Just look at this abomination:
Just look at this abomination.
typeof NaN === "number"
Yeah, you read that right. JavaScript thinks that 'not a number' is a 'number'. You probably didn't know this.
Yeah, you read that right. They think that 'not a number' is 'not a number'. But 'not a number' is a 'number' as part of the IEFFFF spec. You probably didn't know this.
Yeah, you read that right. They think that 'not a number' is a 'number'. But if you look closely at the name of 'not a number', you'll notice that it says 'not a number', not 'a number'. You probably didn't know this.
Yeah, you read that right. They think that 'not a number' is 'not a number' as if any of this matters. When push comes to shove, our reality has no meaning, and there's no point in arguing about anything. You probably didn't know that.
Yeah, you read that right. They think that nothing matters. But they could just go outside and touch grass. If they went to the gym, or created a child as soon as possible, they'd find meaning in their life. You probably didn't know this.
Yeah, you read that right. They're trying to make out that they're not a nerd like everyone else reading this. (Also getting weird vibes from that child comment). Really, they shouldn't have kids. They should stay single, live in the dark, and work overtime all day to make their startup a success. Too many people don't want to work nowadays. You probably didn't know this.
That's the kind of high level satire you can expect from DreamBerd.
Except... That's not the truth. Here's the real truth:
The Real Truth About DreamBerd
DreamBerd's true purpose is to make fun of everyone. Just look at this abomination:
Just look at this abomination:
Just look at this abomination:
Just look at this abomination:
Just look at this abomination:
Just look at this abomination:
Just look at this abomination.
typeof NaN === "number"
Yeah, you read that right. JavaScript thinks that 'not a number' is a 'number'. You probably didn't know this.
Yeah, you read that right. They think that 'not a number' is 'not a number'. But 'not a number' is a 'number' as part of the IEFFFF spec. You probably didn't know this.
Yeah, you read that right. They think that 'not a number' is a 'number'. But if you look closely at the name of 'not a number', you'll notice that it says 'not a number', not 'a number'. You probably didn't know this.
Yeah, you read that right. They think that 'not a number' is 'not a number' as if any of this matters. When push comes to shove, our reality has no meaning, and there's no point in arguing about anything. You probably didn't know that.
Yeah, you read that right. They think that nothing matters. But they could just go outside and touch grass. If they went to the gym, or created a child as soon as possible, they'd find meaning in their life. You probably didn't know this.
Yeah, you read that right. They're trying to make out that they're not a nerd like everyone else reading this. (Also getting weird vibes from that child comment). Really, they shouldn't have kids. They should stay single, live in the dark, and work overtime all day to make their startup a success. Too many people don't want to work nowadays. You probably didn't know this.
Yeah, you read that right. Both sides are as bad as each other. But not me. I'm above all that. You probably didn't know this.
That's the kind of high level satire you can expect from DreamBerd.
Except... That's not the truth. Here's the real truth:
The Real Truth About DreamBerd
DreamBerd's true purpose is to make fun of people who make fun of everyone. Just look at this abomination:
Just look at this abomination:
Just look at this abomination:
Just look at this abomination:
Just look at this abomination:
Just look at this abomination:
Just look at this abomination:
Just look at this abomination.
typeof NaN === "number"
Yeah, you read that right. JavaScript thinks that 'not a number' is a 'number'. You probably didn't know this.
Yeah, you read that right. They think that 'not a number' is 'not a number'. But 'not a number' is a 'number' as part of the IEFFFF spec. You probably didn't know this.
Yeah, ...
DreamBerd is winding down
When we started a startup
When we started a startup,
we had one mission:
Amass billions of dollars of wealth.
Despite raising Β£500 in our pre-seed
(thanks to a last minute investment)
We weren't able to achieve our goal
and we've decided to wind down the company.
All DreamBerd employees have been fired.
They have little chance
of finding a new job in this market.
Many will have to sell their homes.
And skip meals.
A message to our users
Sorry to those of you relying on DreamBerd software.
We'll be transferring your accounts to Google Domains in the coming weeks.
Keep dreaming.
Lu Wilson
ex-CEO of the DreamBerd Foundation
The Truth About DreamBerd
Last week, we shut down the company, so there's no need to stay in character anymore.
For the first time ever, these release notes will contain no jokes, no sarcasm, and no humour of any kind. Instead, it's time to answer all the questions you ask us most. Questions like...
β’ Is DreamBerd a joke?
β’ What is DreamBerd making fun of?
β’ Will you accept my PR full of offensive jokes?
It's time to answer them all. No more lies! Here's the truth:
The Truth About DreamBerd
Is DreamBerd a joke?
Yes.
What is DreamBerd making fun of?
DreamBerd is making fun of JavaScript.
JavaScript is a terrible language, full of terrible design decisions. Just look at this abomination:
!!!!!!!true
Yeah... You read that right. JavaScript lets you put multiple exclamation marks at the start of a line. Dreamberd mocks this by allowing you to put multiple exclamation marks at the end of the line.
That's the kind of high-level satire you can expect from DreamBerd.
Here's another one:
typeof NaN === "number"
Yeah... You read that right. JavaScript thinks that 'not a number' is a 'number'. You probably didn't know this.
Not everyone will get these jokes. You have to be thinking quite laterally.
Will you accept my PR full of offensive jokes?
No.
Tune in next week for more DreamBerd release notes.
If you love anti-javascript humour, then you'll love my video about how bad it is. Watch (or re-watch) it here.
Announcing DreamBerd's Β£460 pre-seed
Hello investors and stake-holders (and community).
Today on this very day we announce our highly successful pre-seed round.
We're the best! Please remember that.
The damage
A whopping 42 of you invested a total of Β£460.18 in the DreamBerd Foundation. As promised, all your money has gone towards fighting conversion therapy.
We're against conversion in all its forms, whether that's implicitly interpreting a number as a string, or making a trans person kill themselves.
As such, we've now donated Β£460.18 to the Stonewall charity. Thank you for making this possible!
For full transparency, we've posted up full anonymised info about the fundraise. Keep us honest by checking that your investment has been included! Unfortunately the sweet wrapper deal fell through due to logistical issues.
The moment
Did you miss a chance to invest? Don't worry! Nothing is stopping you from donating directly to Stonewall right now. Or if you prefer, simply find your nearest queer person, and ask for advice on how to help.
If you don't know any queer people then maybe you should.
The future
The internet is a strange place. It brings out the best and worst in people, myself included. What does it bring out in you?
See you next week,
Lu x
Investor email
In the true spirit of open source, this investor email is shared with everyone.
Hello DreamBerd investors (all 29 of you).
First of all, thank you for your money. As of today, we've raised Β£181.81 and also a sweet wrapper1.
And now, we're happy to announce what your money will be spent on.
But first... a community update!
Community update
DreamBerd's investment round went viral on micro-blogging network, mastodon. That's where the vast majority of fundraising & discussion happened.
As an after-thought, it was also cross-posted to Elon Musk's X on twitter dot com. A small number of people enjoyed the 'sloppy seconds' of the event over there.
What your money will be spent on
Your money will be donated to the Stonewall charity. This will help to prevent the DreamBerd creator from losing their human rights, allowing maintenance of the project to continue.
This has been part of the DreamBerd docs for a long time. Even so, most influencers suspiciously skip that section when doing their read-through.
In the past, we've tried several times to raise money for similar causes. Unfortunately, all of these attempts fell flat. Very few people in the tech world seem interested in donating to an LGBT+ charity.
But everyone seems keen to donate to an imaginary programming language.
Projected growth
Following this announcement, we expect a slight change in growth.
Some people will become more keen to invest, and will donate more money. Others will become disinterested, and will quietly slip away. A small number of people will become actively offended.
Whatever you decide to do β we fully support you. Please continue/stop promoting DreamBerd. We do/don't want your good/bad vibes in our community. We hope you have a lovely/awful day.
A message from our founder
Stonewall is currently campaigning to get conversion therapy banned. If you don't know what conversion therapy is... It's like JavaScript type coercion, except it happens to queer people instead of strings.
Unfortunately, my government refuses to do anything about it. Our prime minister prefers to go on anti-trans rants.
Banning conversion therapy would be the absolute bare minimum. It's a form of psychological torture and it happens to more people than you think. For example, it's how I ended up as NaN-binary.
So...
π΅ Invest in DreamBerd! have some fun! support esoteric programming! and fight conversion therapy! π΅
Invest now at dreamberd.computer. All of your money will be given to the Stonewall charity.
Thanks for reading this week's release notes. See you next week.
-
sweet wrapper by verbal agreement only β©
DreamBerd is raising a pre-seed
We tried to keep this one under wraps but the hype is too strong.
The rumours are true! DreamBerd is raising a pre-seed round.
We already have some big players on the table.
β’ Β£10 - Sunil Pai (creator of partykit)
β’ Β£10 - Alex Dytrych (creator of infinite scroll)
β’ $35 - David Sheldrick (creator of patch-package)
β’ sweet wrapper1 - Steve Ruiz (creator of tldraw)
β’ Β£1 - Lu Wilson (creator of DreamBerd)
If you're interested in investing in DreamBerd, feel free to book a call via my calendly. But move fast - it's likely to fill up quickly. That's how hot DreamBerd is right now! π₯
Or if you're already convinced, simply head over to dreamberd.computer, and pick an amount that works for you. Then enjoy your new life as a DreamBerd investor!
Remember: Being a good investor isn't about making money. It's about having the best portfolio. Add DreamBerd to your arsenal today!
A message from our founder
Hi, it's Lu Wilson here, CEO of the DreamBerd Foundation.
Your valuable investment will be used to ensure the continued development of DreamBerd, the perfect programming language.
Unfortunately, maintaining DreamBerd has become a costly task. The language has become so popular that I now receive thousands of incomplete DreamBerd programs by email everyday. This has become too much for me to handle alone.
With your investment money, I'll be able to tackle the growing backlog of emails by paying for Replit's child labour services!
Thanks, and thanks for tuning into this week's DreamBerd update.
-
sweet wrapper by verbal agreement only β©
(The (parentheses (update)))
Today we are pleased to announce DreamBerd 3.
With it, we introduce a brand new feature...
Parentheses
Parentheses in DreamBerd do nothing. They get replaced with whitespace.
The following lines of code all do the same thing.
add(3, 2)!
add 3, 2!
(add (3, 2))!
add)3, 2(!
Lisp lovers will love this feature. Use as many parentheses as you want!
(add (3, (add (5, 6))))!
Lisp haters will also love it.
(add (3, (add (5, 6)!
Bounties £££
There's a growing number of people attempting to build a DreamBerd compiler. We imagine that this update will decrease that number.
If you really want to make a DreamBerd compiler, we highly recommend that you target a smaller subset of the language. Please consider the following features optional:
- Multiplayer
const const const
server
Feel free to use a local store instead. - AI
If your code has a compile-time error... but could potentially be 'un-errored' by adding more code... it's supposed to email me ([email protected]). But this kind of 'partial' parsing can be tricky. So feel free to ignore this, or only do it in certain cases. - Implicit strings
If your code has a compile-time error... but could potentially be 'un-errored' by interpreting a certain part of it as a string... it's supposed to interpret the shortest possible amount as code as such. Again, this kind of 'possibility parsing' can be tricky. So feel free to ignore this, or only do it in a small number of cases. - Optional parentheses
As of today, all parentheses are optional. Their use can mostly be replaced by significant whitespace. For function calling, your parser now needs to figure out the signature of every function, so that it can figure out which arguments are being passed to it. This is quite hard! Feel free to require parentheses. - ECMAScript
Unless otherwise stated, DreamBerd is the same as ECMAScript. But that can take a lot of work to parse and compile, especially when combined with the other tricky aspects. So I highly recommend just sticking to the functions and features that appear in the DreamBerd documentation.
Even when ignoring these, making a DreamBerd compiler can be hard!
Therefore, the DreamBerd Foundation will pay the following rewards for these accomplishments:
- Β£99 to a charity* of your choice - if you're the first person to make a DreamBerd compiler (with the above exceptions)
- Β£99 to a charity* of your choice - if you're the first person to make a DreamBerd compiler (with NO exceptions)
Or do both at once to win Β£198 outright!
Many thanks,
Lu Wilson, CEO of the DreamBerd Foundation, please pay me money so I can afford these bounties.
*no techbro charities
Announcing DreamBerd 2
It's finally here.
Today we're launching DreamBerd 2, the sequel to the perfect programming language. We think you'll enjoy the new powers and possibilities that it brings.
Note: DreamBerd 2 is a full re-write, so please let us know about any bugs or issues that you find.
Keep reading for its new features! When you've finished reading through all the new features, check out the new examples.
New features
Exclamation marks!
Be bold! End every statement with an exclamation mark!
print("Hello world")!
If you're feeling extra-bold, you can use even more!!!
print("Hello world")!!!
If you're unsure, that's ok. You can put a question mark at the end of a line instead. It prints debug info about that line to the console for you.
print("Hello world")?
You might be wondering what DreamBerd 2 uses for the 'not' operator, which is an exclamation mark in most other languages. That's simple - the 'not' operator is a semi-colon instead.
if (;false) {
print("Hello world")!
}
Declarations
There are four types of declaration. Constant constants can't be changed in any way.
const const name = "Luke"!
Constant variables can be edited, but not re-assigned.
const var name = "Luke"!
name.pop()!
name.pop()!
Variable constants can be re-assigned, but not edited.
var const name = "Luke"!
name = "Lu"!
Variable variables can be re-assigned and edited.
var var name = "Luke"!
name = "Lu"!
name.push("k")!
name.push("e")!
Immutable data
New for 2023!
Mutable data is an anti-pattern. Use the const const const
keyword to make a constant constant constant. Its value will become constant and immutable, and will never change. Please be careful with this keyword, as it is very powerful, and will affect all users globally forever.
const const const pi = 3.14!
Naming
Both variables and constants can be named with any Unicode character or string.
const const firstAlphabetLetter = 'A'!
var const π = True!
var var 1οΈβ£ = 1!
This includes numbers, and other language constructs.
const const 5 = 4!
print(2 + 2 === 5)! //true
Arrays
Some languages start arrays at 0
, which can be unintuitive for beginners. Some languages start arrays at 1
, which isn't representative of how the code actually works. DreamBerd 2 does the best of both worlds: Arrays start at -1
.
const const scores = [3, 2, 5]!
print(scores[-1])! //3
print(scores[0])! //2
print(scores[1])! //5
New for 2022!
You can now use floats for indexes too!
const var scores = [3, 2, 5]!
scores[0.5] = 4!
print(scores)! //[3, 2, 4, 5]
When
In case you really need to vary a variable, the when
keyword lets you check a variable each time it mutates.
const var health = 10!
when (health = 0) {
print("You lose")!
}
Lifetimes
DreamBerd 2 has a built-in garbage collector that will automatically clean up unused variables. However, if you want to be extra careful, you can specify a lifetime for a variable, with a variety of units.
const const name<2> = "Luke"! //lasts for two lines
const const name<20s> = "Luke"! //lasts for 20 seconds
By default, a variable will last until the end of the program. But you can make it last in between program-runs by specifying a longer lifetime.
const const name<Infinity> = "Luke"! //lasts forever
Variable hoisting can be achieved with this neat trick. Specify a negative lifetime to make a variable exist before its creation, and disappear after its creation.
print(name)! //Luke
const const name<-1> = "Luke"!
Loops
Loops are a complicated relic of archaic programming languages. In DreamBerd 2, there are no loops.
Installation
To install DreamBerd to your command line, first install the DreamBerd installer.
To install the DreamBerd installer, install the DreamBerd installer installer.
New for 2022!
Due to the complicated installation process, you can now install the 'Create DreamBerd App' app that installs everything for you!
Booleans
Booleans can be true
, false
or maybe
.
const var keys = {}!
addEventListener("keydown", e => keys[e.key] = true)!
addEventListener("keyup", e => keys[e.key] = false)!
function isKeyDown(key) => {
if (keys[key] = undefined) {
return maybe!
}
return keys[key]!
}
Technical info: Booleans are stored as one-and-a-half bits.
Arithmetic
DreamBerd 2 has significant whitespace. Use spacing to specify the order of arithmetic operations.
print(1 + 2*3)! //7
print(1+2 * 3)! //9
Indents
When it comes to indentation, DreamBerd 2 strikes a happy medium that can be enjoyed by everyone: All indents must be 3 spaces long.
function main() => {
print("DreamBerd 2 is the future")!
}
-3 spaces is also allowed.
function main() => {
print("DreamBerd 2 is the future")!
}
Equality
JavaScript lets you do different levels of comparison. ==
for loose comparison, and ===
for a more precise check. DreamBerd 2 takes this to another level.
You can use ==
to do a loose check.
3.14 == "3.14"! //true
You can use ===
to do a more precise check.
3.14 === "3.14"! //false
You can use ====
to be EVEN MORE precise!
const const pi = 3.14!
print(pi ==== pi)! //true
print(3.14 ==== 3.14)! //true
print(3.14 ==== pi)! //false
If you want to be much less precise, you can use =
.
3 = 3.14! //true
Functions
To declare a function, you can use any letters from the word function
(as long as they're in order):
function add (a, b) => a + b!
func multiply (a, b) => a * b!
fun subtract (a, b) => a - b!
fn divide (a, b) => a / b!
functi power (a, b) => a ** b!
union inverse (a) => 1/a!
Dividing by zero
Dividing by zero returns undefined
.
print(3 / 0)! // undefined
Strings
Strings can be declared with single quotes or double quotes.
const const name = 'Lu'!
const const name = "Luke"!
They can also be declared with triple quotes.
const const name = '''Lu'''!
const const name = "'Lu'"!
In fact, you can use any number of quotes you want.
const const name = """"Luke""""!
Even zero.
const const name = Luke!
String interpolation
Please remember to use your regional currency when interpolating strings.
const const name = "world"!
print("Hello ${name}!")!
print("Hello Β£{name}!")!
print("Hello Β₯{name}!")!
And make sure to follow your local typographical norms.
print("Hello {name}β¬!")!
The symbol for the Cape Verdean escudo is placed in the decimal separator position, as in 2$50.
Developers from the Republic of Cape Verde can benefit from this syntax:
addEventListener("keydown", e => print(`You've pressed: {e$code}`))!
Types
Type annotations are optional.
const var age: Int = 28!
By the way, strings are just arrays of characters.
String == Char[]!
Similarly, integers are just arrays of digits.
Int == Digit[]!
If you want to use a binary representation for integers, Int9
and Int99
types are also available.
const var age: Int9 = 28!
Technical info: Type annotations don't do anything, but they help some people to feel more comfortable.
Regular expressions
You can use the regular expression type to narrow string values.
const const email: RegExp<(?:[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*|"(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21\x23-\x5b\x5d-\x7f]|\\[\x01-\x09\x0b\x0c\x0e-\x7f])*")@(?:(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?|\[(?:(?:(2(5[0-5]|[0-4][0-9])|1[0-9][0-9]|[1-9]?[0-9]))\.){3}(?:(2(5[0-5]|[0-4][0-9])|1[0-9][0-9]|[1-9]?[0-9])|[a-z0-9-]*[a-z0-9]:(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21-\x5a\x53-\x7f]|\\[\x01-\x09\x0b\x0c\x0e-\x7f])+)\])> = "[email protected]"!
To avoid confusion, you can use any spelling that you want, such as 'Regex', 'RegularExpression' or even
'RegularExpress' if you like trains.
For simplicity, all supported regular expressions match the regular expression /Reg(ular)?[eE]x(press(ion)?|p)?/
.
Previous
The previous
keyword lets you see into the past!
Use it to get the previous value of a variable.
const var score = 5!
score++!
print(score)! //6
print(previous score)! //5
Similarly, the next
keyword lets you see into the future!
const var score = 5!
after ("click") score++!
print(await next score)! //6 (when you click)
File structure
Write five or more equals signs to start a new file. This removes the need for multiple files or any build process.
const const score = 5!
print(score)! //5
=====================
const const score = 3!
print(sc...
DreamBerd has been renamed to DreamBerd
DreamBerd has been through a lot of changes recently. Despite our best efforts, they haven't been popular.
Today, we're happy to announce that DreamBerd is returning to its roots.
No more satirical content! Just high quality programming humour for those who are smart enough.
"Our only priority is to make DreamBerd more popular."
To kick things off, DreamBerd has been renamed back to DreamBerd. So...
And stay tuned for more DreamBerd updates.
For You feed
We just upgraded your experience!
Our documentation has been completely removed, and replaced with a For You feed.
It'll now be easier to find the stories that you love right here on GitHub.
As always, please leave your feedback in the discussions π