base on The Open Source Ruby on Rails SaaS Template # Bullet Train Application Template
If you're new to Bullet Train, start with the [Bullet Train Developer Documentation](https://bullettrain.co/docs) and the [Getting Started](https://bullettrain.co/docs/getting-started) guide. You should also [join the community Discord server](https://discord.gg/bullettrain)!
## Building a New Application with Bullet Train
If you're building a new application with Bullet Train, you don't want to "Fork" the template repository on GitHub. Instead, you should:
1. Clone the template repository:
```
git clone
[email protected]:bullet-train-co/bullet_train.git your_new_project_name
```
2. Enter the project directory:
```
cd your_new_project_name
```
3. Run the configuration and setup scripts:
```
bin/configure
bin/setup
```
4. Boot your application:
```
bin/dev
```
5. Visit `http://localhost:3000`.
## Cloud Development with Gitpod
[![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/#https://github.com/bullet-train-co/bullet_train)
Clicking this button will set up a new Bullet Train project for development on [Gitpod](https://gitpod.io).
<br>
<br>
<p align="center">
<strong>Open-source development sponsored by:</strong>
</p>
<p align="center">
<a href="https://www.clickfunnels.com"><img src="https://images.clickfunnel.com/uploads/digital_asset/file/176632/clickfunnels-dark-logo.svg" width="575" /></a>
</p>
<br>
<br>
## Provisioning a Production Environment
You can use this public repository to provision a new application and then push your private application code there later.
### Render
[![Deploy to Render](https://render.com/images/deploy-to-render-button.svg)](https://render.com/deploy?repo=https://github.com/bullet-train-co/bullet_train)
Clicking this button will take you to the first step of a process that, when completed, will provision production-grade infrastructure for your Bullet Train application which will cost about **$30/month**.
After you have confirmed the settings, it might be that you run into an error with the yarn version on the Render server, in which case you'd need to match your local yarn version to Render's version on their servers:
```json
// package.json
{
// ... more configs...
"packageManager": "
[email protected]"
}
```
When you're done deploying to Render, you need to go into "Dashboard" > "web", copy the server URL, and then go into "Environment Groups" > "settings" of your project and paste the URL into the value for `BASE_URL`. If you configured a custom domain already than add that URL.
#### Running on Render for free
If you would like to get acquinted with Render and Bullet Train first, you can start with free settings like this:
```yaml
# render.yaml
databases:
- name: database
databaseName: database
user: bullet_train
plan: free # Change this to "free".
services:
- type: redis
name: redis
ipAllowList: []
plan: free # Change this to "free".
maxmemoryPolicy: noeviction
- type: web
name: web
plan: free # Change this to "free".
# ...
- type: worker
name: worker
plan: free # Change this to "free". This will shut off the background worker.
```
The gotchas here are that the background workers will be shut off (e.g., you won't receive any email from the app) and a limited amount of hosting hours is granted with the servers sleeping in after some time of inactivity. This should be enough for you to get acquinted with Bullet Train and host your app from day one in the world wide web. Turning on the worker will incur extra cost ($7/mo at the time); You can configure your app to production-grade infrastructure with always-on servers starting at about 20$-30$ per month.
### Heroku
[![Deploy to Heroku](https://www.herokucdn.com/deploy/button.svg)](https://heroku.com/deploy?template=http://github.com/bullet-train-co/bullet_train)
Clicking this button will take you to the first step of a process that, when completed, will provision production-grade infrastructure and services for your Bullet Train application which will cost about **$140/month**.
Once that process has completed, be sure to complete the other steps from the [Deploying to Heroku](https://bullettrain.co/docs/heroku) documentation.
## Contribute to Bullet Train
If you're looking contribute to Bullet Train, you should "Fork" this template repository on GitHub, like so:
1. Visit https://github.com/bullet-train-co/bullet_train.
2. Click "Fork" in the top-right corner.
3. Select the account where you want to fork the repository.
4. Click the "Code" button on the new repository and copy the SSH path.
5. Clone your forked repository using the SSH path you copied, like so:
```
git clone
[email protected]:your-account/bullet_train.git
cd bullet_train
```
6. Run the setup script:
```
bin/setup
```
7. Start the application:
```
bin/dev
```
> [!NOTE]
> Optional: If you have [ngrok](https://ngrok.com/) installed, uncomment `ngrok: ngrok http 3000` from `Procfile.dev` and run
> `bin/set-ngrok-url` to set `BASE_URL` to a publically accessible domain.
> Run `bin/set-ngrok-url` after restarting `ngrok` to update `BASE_URL` to
> the current public url.
8. Visit http://localhost:3000.
---
This `README.md` file will be replaced with [`README.example.md`](./README.example.md) after running `bin/configure`.
", Assign "at most 3 tags" to the expected json: {"id":"1879","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"