1. Run the request
curl -X {{METHOD}} '{{URL}}' -H 'Authorization: Bearer {{TOKEN}}' -H 'Content-Type: {{CONTENT_TYPE}}' -d '{{BODY}}'
Step-by-step command flows you read, fill in and run yourself. Built for people who like doing things the old-school way, and for learners who want a solid grasp of every command.
Deploying Laravel/Inertia App on VPS
Create the project folder
sudo mkdir {{project_path}}Move into the project folder
cd {{project_path}}Clone the repository (make sure vendor and dist are on GitHub)
git clone https://{{github_token}}@github.com/{{github_user}}/{{repo_name}}.git .Tell Git to ignore file permission changes on this server (done once per server)
git config --global core.fileMode false
Create the database (paste into the MySQL shell)
CREATE DATABASE {{db_name}};
CREATE USER '{{db_user}}'@'localhost' IDENTIFIED BY '{{db_password}}';
GRANT ALL PRIVILEGES ON {{db_name}}.* TO '{{db_user}}'@'localhost';
FLUSH PRIVILEGES;
EXIT;Move the .env dropped in the home directory into the project
sudo mv /home/ubuntu/.env {{project_path}}Open .env
nano .env
Paste and adjust the .env values
APP_NAME="{{app_name}}"
APP_ENV=production
APP_DEBUG=false
APP_URL={{app_url}}
SESSION_DRIVER=file
DB_DATABASE={{db_name}}
DB_USERNAME={{db_user}}
DB_PASSWORD={{db_password}}Run the migrations
php artisan migrate
Give ownership to ubuntu with the www-data group
sudo chown -R ubuntu:www-data {{project_path}}Set directory permissions
find {{project_path}} -type d -exec chmod 750 {} \;Set file permissions
find {{project_path}} -type f -exec chmod 640 {} \;Make storage and bootstrap/cache writable
sudo chmod -R 770 {{project_path}}/storage {{project_path}}/bootstrap/cacheMake the database directory writable
sudo chmod 770 {{project_path}}/databaseMake the SQLite file writable (if using SQLite)
sudo chmod 660 {{project_path}}/database/database.sqliteMake new files inherit the group from their parent in the entire project
sudo find {{project_path}} -type d -exec chmod g+s {} +Install PHP dependencies (if not built locally & shipped)
composer i
Install JS dependencies (if not built locally & shipped)
npm i
Build assets (if not built locally & shipped)
npm run build
Create the Nginx configuration file
sudo nano /etc/nginx/sites-available/{{app_name}}Paste the Nginx config
server {
listen {{port}};
server_name {{server_ip}};
root {{project_path}}/public;
index index.php index.html;
location / {
try_files $uri $uri/ /index.php?$query_string;
}
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/var/run/php/php8.3-fpm.sock;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
}
}Test the Nginx config
sudo nginx -t
Enable the site
sudo ln -s /etc/nginx/sites-available/{{app_name}} /etc/nginx/sites-enabled/Reload Nginx
sudo systemctl reload nginx
Prisma + PostgreSQL Quick Setup
Install the Prisma CLI as a dev dependency
npm i -D prisma
Install the Prisma client
npm i @prisma/client
Initialize Prisma
npx prisma init
Set the connection string in .env
DATABASE_URL="postgresql://{{db_user}}:{{db_password}}@localhost:5432/{{db_name}}"Add a model to schema.prisma
model Post {
id Int @id @default(autoincrement())
title String
createdAt DateTime @default(now())
}Create and apply the first migration
npx prisma migrate dev --name init
cURL
Run the request
curl -X {{METHOD}} '{{URL}}' -H 'Authorization: Bearer {{TOKEN}}' -H 'Content-Type: {{CONTENT_TYPE}}' -d '{{BODY}}'VPS SSH Key Setup Guide
Generate a key pair
ssh-keygen -t {{key_type}} -C "{{email}}"Copy the public key
cat {{key_file}}.pubLog in with your password (once)
ssh {{user}}@{{server_ip}}Add your public key on the server
echo "{{public_key}}" >> ~/.ssh/authorized_keysLog in with the key
ssh -i {{key_file}} {{user}}@{{server_ip}}Open the SSH daemon config
nano /etc/ssh/sshd_config
Set these values to disable password login
PasswordAuthentication no PubkeyAuthentication yes PermitRootLogin yes
Restart the SSH service
systemctl restart ssh
SCP
Copy the file
scp {{FILE_CURRENT_PATH}} {{HOST}}:{{TARGET_PATH}}Docker Compose
Exec into the service
docker compose -f {{COMPOSE_FILE}} exec {{SERVICE}} {{SHELL}}Running a Node.js App with PM2
Move into the project folder
cd {{project_path}}Install production dependencies
npm install --production
Start the app with PM2
pm2 start {{entry_file}} --name {{app_name}}Save the process list
pm2 save
Generate the startup script so PM2 survives reboots
pm2 startup
Check the process status
pm2 status
Check the logs
pm2 logs {{app_name}}Confirm which port the server listens on
grep -R "listen" {{entry_file}}A flow is a written-down procedure: the commands you run, in order, with the parts that change marked as variables. Nothing runs until you run it.
You would rather type the command than click through a black box. Flow Rigs keeps you in your own terminal: no hidden automation, just the exact commands, filled in with your values and ready to copy.
Copying a script teaches you nothing. Walking through a flow one step at a time, with every command and every value in plain sight, builds a real understanding of what each command does and why it comes next.
Send an HTTP request with method, headers, authorization, and body placeholders.
curl -X {{METHOD}} '{{URL}}' -H 'Authorization: Bearer {{TOKEN}}' -H 'Content-Type: {{CONTENT_TYPE}}' -d '{{BODY}}'
Write down the commands you run, fill in the blanks once, and run each step yourself at your own pace.