Tweet
I have decided to give the default Bootstrap 5 shipped with IHP a chance. Haven't touched bootstrap since I first learned web development #buildinpublic #shipnix
after reading @arvidkahl's "Zero to Sold", I'm going to test a prioritization framework

think I have the tendency to select the most challenging task and not think too deliberately about impact or demand

really liking the simplicity of the "DIE method" #buildinpublic
✅ Low hanging evening fruit: Load server data instantly into Elm view, so no more loading flickering/layout shift.

Seemlessly hydrates with IHP DataSync realtime data which is really nice because updating state = just subscribing to changes in db row.

#shipnix #buildinpublic
✅ Delete NixOs custom image automatically when user deletes ship-nix account since hosting custom images costs a couple of cents per month #shipnix #buildinpublic
✅ Add server-validation to form for adding DigitalOcean credentials, including when DigitalOcean API complains #shipnix #buildinpublic
Make sure #shipnix is still usable for non-github users and that relevant views print correctly #buildinpublic
✅ Full client-side validation on "New server" form since whole form is in SPA (Elm) land.

Form now only attempts submit if valid (already has server-side validation) #shipnix #buildinpublic

Probably better to later make it a mainly server-rendered form w some SPA form fields
✅ Add client side error message on server name input so user gets instant feedback #shipnix #buildinpublic
✅ Fix migration flow so it's more obvious something is loading, move more state into database and "cancel and start fresh" button.

In short, trying to make it intuitive enough for an early adopter.

#shipnix #buildinpublic
✅ Fixed bug where database is declared twice on IHP starters.

I think automated e2e tests will be great for catching problems early after code changes. High priority after launch. #shipnix #buildinpublic
✅ Fix deploy key edge case

Can happen when 1st attempt adding repo fails. Later you retry and fail when deploy key was added last build

#shipnix now checks if deploy key for the server is already present before trying to add. Just skips if all is good

#buildinpublic
✅ Store deploy key information in database when using Github so they can later be deleted when server is destroyed or ejected. And implement this functionality on server deletion.

#shipnix #buildinpublic
✅Decide server dashboard layout & features are good enough for public #buildinpublic #shipnix

NEXT STEPS:
- Simplify onboarding and create server flow. Too many steps now.
- Write docs
- Release free open source tier to public
- Hook up Stripe for commercial tiers
✅ Decide server dashboard layout & features are completed, and good enough for public #buildinpublic

Great milestone!

NEXT STEPS:
- Simplify onboarding and create server flow. Too many steps now.
- Release free open source tier to public
- Hook up Stripe for commercial tiers
✅ Build staging server by inputting only #shipnix repo and environment variables. Otherwise everything assembled automatically.

Some minutes later, a server identical to #shipnix production with it's own database was reproduced with the power of Nix!

#shipnix #buildinpublic
✅ Switch to Network.HTTP.Simple for all Github requests so response parsing and error handling works as expected, and test it still works as it used to #shipnix #buildinpublic
Spend hours trying to make a wreq http request reliably return Either type.

Typechecks, but only works when request succeeds, execution freezes when hitting an http exception.

Why isn't Either something that just works in the most popular #haskell http lib? #buildinpublic
Spend hours trying to make a wreq http request reliably return Either type.

Typechecks, but only works when request succeeds, execution freezes when hitting an http exception.

Why isn't Either something that just works in the most popular http lib? #buildinpublic
✅ Rebuild #shipnix staging server I accidentaly deleted.

I discovered several new snags in the migrate flow. Trying to reproduce ship-nix with ship-nix is great dogfooding for manual testing.

Lots of provisioning and destroying servers until it works properly #buildinpublic