https://github.com/function61/xs.fi
xs.fi ("accessify"): semantic, persistent URL namespace and a metadata specification.
https://github.com/function61/xs.fi
Last synced: 5 months ago
JSON representation
xs.fi ("accessify"): semantic, persistent URL namespace and a metadata specification.
- Host: GitHub
- URL: https://github.com/function61/xs.fi
- Owner: function61
- License: gpl-3.0
- Created: 2024-04-01T07:10:59.000Z (almost 2 years ago)
- Default Branch: main
- Last Pushed: 2025-01-28T12:53:13.000Z (12 months ago)
- Last Synced: 2025-05-17T03:14:54.819Z (8 months ago)
- Language: Go
- Size: 32.2 KB
- Stars: 0
- Watchers: 1
- Forks: 0
- Open Issues: 1
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
⬆️ For table of contents, click the above icon
xs.fi ("accessify"): semantic, persistent URL namespace and a metadata specification.
Let's make URLs and metadata beautiful again.
We offer URLs like [https://xs.fi/movie/by-imdb/tt12593682/imdb](https://xs.fi/movie/by-imdb/tt12593682/imdb)
We also plan to be a metadata specification to provide guide how to record metadata for your precious
If you recognize yourself as a data hoarder, you'll feel right at home.
URL model
---------
| Path after `https://xs.fi` | Example | Components | Description |
|-----------------------|-----------------------------|-----------------|-------------|
| `/` | `https://xs.fi/movie` | `namespace=movie` | We are going to be referencing a movie |
| `//` | `https://xs.fi/movie/by-imdb` | `namespace=movie`, `query=by-imdb` | Movie by IMDb ID |
| `///` | `https://xs.fi/movie/by-imdb/tt12593682` | `namespace=movie`, `query=by-imdb`, `id=tt12593682` | Movie by IMDb ID tt12593682 |
| `////` | `https://xs.fi/movie/by-imdb/tt12593682/imdb` | `namespace=movie`, `query=by-imdb`, `id=tt12593682`, `resource=imdb` | IMDb page for movie by IMDb ID tt12593682 |
In pseudo you can think of our backend data model like this:
```json
{
"namespaces": {
"movie": {
"queries": [
{
"query": "by-imdb"
}
],
"resources": [
{
"resource": "imdb",
"description": "IMDb page",
"redirect_to": "https://www.imdb.com/title/"
}
]
},
"tv-series": {
"queries": [
{
"query": "by-imdb"
}
],
"resources": [
{
"resource": "imdb",
"description": "IMDb page",
"redirect_to": "https://www.imdb.com/title/"
}
]
}
}
}
```
- `namespace` is the first part after xs.fi: `https://xs.fi/`. Example namespace is `movie`.
- Namespace is *usually* followed by `query` so the format usually is `https://xs.fi//` After the namespace usually comes `by-` query.
Example is `https://xs.fi//by-imdb` which means we are referencing a node based on its IMDB ID.
For `by-imdb` namespaces which make sense are `movie` or `tv-series` so namespace+query combos read like `movie/by-imdb` or `tv-series/by-imdb`
- *Identifier*
- *Resource*
Why?
----
Practice has shown that not all people think URLs are beautiful or important: they'll change their web application UI and break old URLs.
So if IMDb ever changes the title URL to something else than `https://www.imdb.com/title/` then
xs.fi can change that in the code to link to the new URL
Audience
--------
### Human consumption
Currently the URLs are meant for **human consumption**, i.e. it is expected the URLs to be opened in a browser.
### API access
> [!WARNING]
> Not implemented. This *might* be added later.
That will be handled by [Content negotiation](https://en.wikipedia.org/wiki/Content_negotiation),
concretely something like `Accept: application/json` to distinguish opt-in to programmatic access instead of human consumption.
TODO
----
- Support "xs.fi:ification" of URLs: give `https://www.imdb.com/title/tt12593682` as input and it
should spit you back `https://xs.fi/movie/by-imdb/tt12593682/imdb` and also related resources like TMDB.
Promises
--------
xs.fi will always:
- Stay
* our largest value proposition is to not break your links and not annoy you
- Be free
- Not show advertisements
* or if we ever need to resort to ads then it will be based on
[Acceptable Ads](https://acceptableads.com/standard/), preferably the Text ads variant.