Skip to content

Instantly share code, notes, and snippets.

View papucho's full-sized avatar

Fernando Araújo papucho

View GitHub Profile
@ptman
ptman / heroku-alternatives.md
Last active April 1, 2026 16:47
Heroku alternatives
Tool / Project Type / Architecture UI / Dashboard CLI / API Multi‑node / Clustering Auto TLS / SSL / ACME Zero‑downtime / Rolling Deploy Preview / PR Environments Team / Permissions Volume / Backup Support Open Source / License Heroku‑style Compatibility Pros / Strengths Cons / Caveats / Weaknesses
Dokku Single‑server (extensions for multi) Minimal (no central UI, though plugins exist) CLI, plugin APIs Via community / plugin / custom setups Yes (Let’s Encrypt plugin) Via Docker techniques / plugin Limited, requires extra setup Basic (single admin; community plugins) Plugin / manual (e.g. volume backups) MIT (fully open source) Good: git push, buildpack style, plugins add DB, etc. Very stable, mature, lots of community extensions Scaling / multi‑node is manual; UI is weak; managing many apps / teams is harder
Dokploy Multi‑node / cluster (Docker Swarm) Yes (built‑in UI) CLI + AP
@samsch
samsch / stop-using-jwts.md
Last active August 27, 2026 00:03
Stop using JWTs

Stop using JWTs!

TLDR: JWTs should not be used for keeping your user logged in. They are not designed for this purpose, they are not secure, and there is a much better tool which is designed for it: regular cookie sessions.

If you've got a bit of time to watch a presentation on it, I highly recommend this talk: https://www.youtube.com/watch?v=pYeekwv3vC4 (Note that other topics are largely skimmed over, such as CSRF protection. You should learn about other topics from other sources. Also note that "valid" usecases for JWTs at the end of the video can also be easily handled by other, better, and more secure tools. Specifically, PASETO.)

A related topic: Don't use localStorage (or sessionStorage) for authentication credentials, including JWT tokens: https://www.rdegges.com/2018/please-stop-using-local-storage/

The reason to avoid JWTs comes down to a couple different points:

  • The JWT specification is specifically designed only for very short-live tokens (~5 minute or less). Sessions
@jshimko
jshimko / docker-ssl-deployment.sh
Last active February 25, 2022 10:11
Deploy Reaction Commerce on Digital Ocean with Nginx and a Let's Encrypt SSL certificate
# start a server on Digital Ocean
# https://docs.docker.com/machine/drivers/digital-ocean/
docker-machine create \
--driver digitalocean \
--digitalocean-access-token <YOUR API KEY> \
--digitalocean-size 2gb \
reaction
# tell Docker to run commands on that server
@BinaryMuse
BinaryMuse / new-pane-commands.js
Created March 17, 2016 05:13
New Atom Pane Commands
// Existing commands that used to be 'pane:split-*'
'pane:split-left-and-copy-active-item'
'pane:split-right-and-copy-active-item'
'pane:split-up-and-copy-active-item'
'pane:split-down-and-copy-active-item'
// New commands to create splits
'pane:split-left'
'pane:split-right'
'pane:split-up'
@brandondurham
brandondurham / styles.less
Last active August 4, 2026 02:19
Using Operator Mono in Atom
/**
* Using Operator Mono in Atom
*
* 1. Open up Atom Preferences.
* 2. Click the “Open Config Folder” button.
* 3. In the new window’s tree view on the left you should see a file called “styles.less”. Open that up.
* 4. Copy and paste the CSS below into that file. As long as you have Operator Mono SSm installed you should be golden!
* 5. Tweak away.
*
* Theme from the screenshot (http://cdn.typography.com/assets/images/blog/operator_ide2.png):
@GavinJoyce
GavinJoyce / gist:4f81d0bf879dad6b203e
Last active August 25, 2026 11:34
speeding up `npm install` by disabling the progress bar
with `react-native`:
npm set progress=false && rm -rf ~/.npm && rm -rf node_modules && npm cache clean && time npm install
npm install 83.72s user 26.03s system 100% cpu 1:49.32 total
npm set progress=true && rm -rf ~/.npm && rm -rf node_modules && npm cache clean && time npm install
npm install 199.30s user 27.32s system 91% cpu 4:08.29 total
--
console.log('Loading event');
var AWS = require('aws-sdk');
var dynamodb = new AWS.DynamoDB();
exports.handler = function(event, context) {
console.log("Request received:\n", JSON.stringify(event));
console.log("Context received:\n", JSON.stringify(context));
var tableName = "OurBlogDemo";
var datetime = new Date().getTime().toString();
@bobbygrace
bobbygrace / trello-css-guide.md
Last active August 15, 2026 15:33
Trello CSS Guide

Hello, visitors! If you want an updated version of this styleguide in repo form with tons of real-life examples… check out Trellisheets! https://github.com/trello/trellisheets


Trello CSS Guide

“I perfectly understand our CSS. I never have any issues with cascading rules. I never have to use !important or inline styles. Even though somebody else wrote this bit of CSS, I know exactly how it works and how to extend it. Fixes are easy! I have a hard time breaking our CSS. I know exactly where to put new CSS. We use all of our CSS and it’s pretty small overall. When I delete a template, I know the exact corresponding CSS file and I can delete it all at once. Nothing gets left behind.”

You often hear updog saying stuff like this. Who’s updog? Not much, who is up with you?

@mculp
mculp / voices.txt
Created December 3, 2014 00:14
List of voices available by the `say` command on OS X
Agnes en_US # Isn't it nice to have a computer that will talk to you?
Albert en_US # I have a frog in my throat. No, I mean a real frog!
Alex en_US # Most people recognize me by my voice.
Alice it_IT # Salve, mi chiamo Alice e sono una voce italiana.
Alva sv_SE # Hej, jag heter Alva. Jag är en svensk röst.
Amelie fr_CA # Bonjour, je m’appelle Amelie. Je suis une voix canadienne.
Anna de_DE # Hallo, ich heiße Anna und ich bin eine deutsche Stimme.
Bad News en_US # The light you see at the end of the tunnel is the headlamp of a fast approaching train.
Bahh en_US # Do not pull the wool over my eyes.
Bells en_US # Time flies when you are having fun.
@addyosmani
addyosmani / package.json
Last active August 10, 2026 17:51
npm run-scripts boilerplate
{
"name": "my-app",
"version": "1.0.0",
"description": "My test app",
"main": "src/js/index.js",
"scripts": {
"jshint:dist": "jshint src/js/*.js",
"jshint": "npm run jshint:dist",
"jscs": "jscs src/*.js",
"browserify": "browserify -s Validating -o ./dist/js/build.js ./lib/index.js",