AI prompts
base on A work in progress bridge/proxy that lets you use Mastodon apps with Bluesky # SkyBridge
![SkyBridge](public/banner.png)
[![style: very good analysis][very_good_analysis_badge]][very_good_analysis_link]
[![License: MIT][license_badge]][license_link]
[![Powered by Dart Frog](https://img.shields.io/endpoint?url=https://tinyurl.com/dartfrog-badge)](https://dartfrog.vgv.dev)
A work in progress bridge/proxy that allows you to use [Mastodon](https://joinmastodon.org) apps with
[Bluesky](https://bsky.app).
SkyBridge attempts to convert Mastodon API calls to Bluesky API calls, and tries to implement enough of the Mastodon API
that apps will be happy connecting to it.
Functionality is very basic at the moment, and there's bound to be a few bugs. Don't expect
this to be your daily driver just yet!
Currently only being tested with [Ivory](https://tapbots.com/ivory) on iOS and macOS, your mileage may vary with
other apps at the moment. PRs and issues are welcome, we want to support as many apps as possible.
If you find this project useful please consider donating, it really helps a lot!
[![ko-fi](https://ko-fi.com/img/githubbutton_sm.svg)](https://ko-fi.com/videah)
## Getting Started
In order to run SkyBridge you will need the [Dart SDK](https://dart.dev/get-dart) installed on your system.
You will also need the Dart Frog CLI installed to run a development server. You can install it with the following
command:
```shell
# 📦 Install the dart_frog cli from pub.dev
dart pub global activate dart_frog_cli
```
Some environment variables need to be set before you can run SkyBridge. You can set them in a `.env` file in the root
of the project. You can copy the `.env.example` file to get started.
```shell
# 📝 Copy and edit the example .env file
cp .env.example .env
open .env
```
Once that's done you can start a development server with the following command:
```shell
# 📥 Clone the repo
git clone https://github.com/videah/skybridge.git
cd skybridge
dart pub get
# 🏁 Start the dev server
dart_frog dev
```
## Self Hosting
The instance of SkyBridge hosted at [skybridge.fly.dev](https://skybridge.fly.dev) is provided as a free public service
but currently faces heavy rate limiting from Bluesky due to all the requests coming from a single IPv4 address.
If you want a more consistent experience you can host your own instance to avoid this.
### Docker
The easiest way to run SkyBridge yourself is with Docker. The image [videah/skybridge](https://hub.docker.com/r/videah/skybridge)
is kept up to date with the main branch of this repo.
You can use the [docker-compose.yml](docker-compose.yml) file in the root of the project to get started.
Simply change the environment variables in the file, and tweak it to suit your setup. You probably want to stick a reverse proxy
like [nginx](https://nginx.org) or [caddy](https://caddyserver.com) in front of it.
### Fly.io
The public instance of SkyBridge is hosted on [Fly.io](https://fly.io). For a single user it is likely possible to
host an instance here for free. A [fly.toml](fly.toml) file is included in the root of the project to help you get started.
## Credits
Huge thanks to [Ninji](https://github.com/Treeki) for their [BirdBridge](https://github.com/Treeki/BirdBridge) project
which was a big help and inspiration for this project!
Thank you to [Shinya Kato](https://github.com/myConsciousness) for
[atproto.dart](https://github.com/myConsciousness/atproto.dart) which powers this project!
[license_badge]: https://img.shields.io/badge/license-MIT-blue.svg
[license_link]: https://opensource.org/licenses/MIT
[very_good_analysis_badge]: https://img.shields.io/badge/style-very_good_analysis-B22C89.svg
[very_good_analysis_link]: https://pub.dev/packages/very_good_analysis
", Assign "at most 3 tags" to the expected json: {"id":"12207","tags":[]} "only from the tags list I provide: [{"id":77,"name":"3d"},{"id":89,"name":"agent"},{"id":17,"name":"ai"},{"id":54,"name":"algorithm"},{"id":24,"name":"api"},{"id":44,"name":"authentication"},{"id":3,"name":"aws"},{"id":27,"name":"backend"},{"id":60,"name":"benchmark"},{"id":72,"name":"best-practices"},{"id":39,"name":"bitcoin"},{"id":37,"name":"blockchain"},{"id":1,"name":"blog"},{"id":45,"name":"bundler"},{"id":58,"name":"cache"},{"id":21,"name":"chat"},{"id":49,"name":"cicd"},{"id":4,"name":"cli"},{"id":64,"name":"cloud-native"},{"id":48,"name":"cms"},{"id":61,"name":"compiler"},{"id":68,"name":"containerization"},{"id":92,"name":"crm"},{"id":34,"name":"data"},{"id":47,"name":"database"},{"id":8,"name":"declarative-gui "},{"id":9,"name":"deploy-tool"},{"id":53,"name":"desktop-app"},{"id":6,"name":"dev-exp-lib"},{"id":59,"name":"dev-tool"},{"id":13,"name":"ecommerce"},{"id":26,"name":"editor"},{"id":66,"name":"emulator"},{"id":62,"name":"filesystem"},{"id":80,"name":"finance"},{"id":15,"name":"firmware"},{"id":73,"name":"for-fun"},{"id":2,"name":"framework"},{"id":11,"name":"frontend"},{"id":22,"name":"game"},{"id":81,"name":"game-engine "},{"id":23,"name":"graphql"},{"id":84,"name":"gui"},{"id":91,"name":"http"},{"id":5,"name":"http-client"},{"id":51,"name":"iac"},{"id":30,"name":"ide"},{"id":78,"name":"iot"},{"id":40,"name":"json"},{"id":83,"name":"julian"},{"id":38,"name":"k8s"},{"id":31,"name":"language"},{"id":10,"name":"learning-resource"},{"id":33,"name":"lib"},{"id":41,"name":"linter"},{"id":28,"name":"lms"},{"id":16,"name":"logging"},{"id":76,"name":"low-code"},{"id":90,"name":"message-queue"},{"id":42,"name":"mobile-app"},{"id":18,"name":"monitoring"},{"id":36,"name":"networking"},{"id":7,"name":"node-version"},{"id":55,"name":"nosql"},{"id":57,"name":"observability"},{"id":46,"name":"orm"},{"id":52,"name":"os"},{"id":14,"name":"parser"},{"id":74,"name":"react"},{"id":82,"name":"real-time"},{"id":56,"name":"robot"},{"id":65,"name":"runtime"},{"id":32,"name":"sdk"},{"id":71,"name":"search"},{"id":63,"name":"secrets"},{"id":25,"name":"security"},{"id":85,"name":"server"},{"id":86,"name":"serverless"},{"id":70,"name":"storage"},{"id":75,"name":"system-design"},{"id":79,"name":"terminal"},{"id":29,"name":"testing"},{"id":12,"name":"ui"},{"id":50,"name":"ux"},{"id":88,"name":"video"},{"id":20,"name":"web-app"},{"id":35,"name":"web-server"},{"id":43,"name":"webassembly"},{"id":69,"name":"workflow"},{"id":87,"name":"yaml"}]" returns me the "expected json"