<dwrensha>
I'm looking at one of my sadnstorm-pkgdef.capnp files, and I'm confused about by it has both "." and "/opt/app" in the source map.
simonv3 has quit [Quit: Connection closed for inactivity]
<dwrensha>
oh, right... "." is the directory of the sandstorm-pkgdef.capnp file, I guess
mattl has joined #sandstorm
<dwrensha>
which in my case is .sandstorm/ relative to the app directory
sugarpuff has joined #sandstorm
hunterm__ has joined #sandstorm
NhanH has joined #sandstorm
azirbel has joined #sandstorm
frigginglorious has quit [Ping timeout: 250 seconds]
TwoJames2 has quit [Ping timeout: 240 seconds]
TwoJames has joined #sandstorm
ecloud_ has quit [Remote host closed the connection]
ecloud has joined #sandstorm
mnutt has quit [Quit: My Mac has gone to sleep. ZZZzzz…]
mnutt has joined #sandstorm
gijoe has joined #sandstorm
gijoe has quit [Client Quit]
TwoJames has quit [Ping timeout: 276 seconds]
TwoJames has joined #sandstorm
<jeddi>
I'm having a problem with a new VM of debian jessie instance I've built, and run up sandstorm on, in normal app (not dev) mode. I've installed a couple of apps (lychee, rocket.chat, wordpress, wekan, mediagoblin), but when I try to raise any one of them as a grain I get the spinner ... but it never (several minutes, and repeatable after a VM reboot) stops spinning.
<jeddi>
Nothing obvious in /opt/sandstorm/var/log ... top and nmon suggest the box isn't choking on cpu or disk resources (indeed, nothing's actually seemingly doing anything).
<jeddi>
One potential confusion is that becaues this is on my local network, and I said yes to jeddi.sandcats.io at provisioning, I had to change my desktop, and the VM, to have an /etc/hosts entry to point to my 192.168.x.y address for that hostname.
<jeddi>
Seeking hints on where to start looking.
<jeddi>
Oh, log (terminal icon) on each grain's page pops up with 'sandstorm supervisor: starting up grain' and then periodic 'grain still in use; staying up for now' messages.
<dwrensha>
sounds like a DNS issue
<dwrensha>
if your server's address in only available on your local network then I think sandcats might not actually be able to handle DNS for it
<dwrensha>
asheesh would know better than I do
<jeddi>
aha - okay. so I could fake it by pointing at a local dns that I mung .. or do other things try to phone home to my install?
<dwrensha>
the Sandcats DNS server tries to automatically detect the IP address of your server
<jeddi>
I may just go crank up a digital ocean instance or something instead - might be easier. Or .. what ports do I need open on my firewall? Just https?
<jeddi>
dwrensha: I had hoped I'd thwarted that lookup locally :)
<jeddi>
Or I can change the base_url and bind_ip ... will that work if the box is on a rfc1918 range .. or do I need to reconfigure and disable the sandcats.io domain?
<jeddi>
I may just start again :)
<dwrensha>
I'm not sure what would be easiest, but I can tell you about my setup.
<dwrensha>
I have a VM on a host-only network at 192.168.56.52
<jeddi>
dwrensha: ahh - i've just undone my /etc/hosts changes on sever and client - and punched a hole for tcp/443 on my adsl router .. and it's working now - i see various processes spinning up, and my spinner wheel has gone!
<jeddi>
probably should have started there. had expected some errors or timeouts in various logs ... but appreciate this is a bit of an edge case.
<dwrensha>
... and I set up DNS to point sandstorm-beryllium.dwrensha.ws to 192.168.56.52
<jeddi>
ah, right. so you don't use the sandcats.io registered sub-domain?
<dwrensha>
correct
<jeddi>
i guess even if I host here or on DO, I'll probably use my vanity domain rather than sandcats.io anyway.
<jeddi>
all good learning experiences!
<dwrensha>
note that sandcats gets you free https
<dwrensha>
if you don't use it, you'll need your own wildcard cert
<jeddi>
argh, that's right ... rings a bell. wildcart certs are a bit of a pain too, if I want to use a freeby provider. hmmm.
<jeddi>
okay - i'll stick with sandcats.io until I'm really bored one rainy weekend.
<XgF>
Random thing: Has there been any thought to pulling out some of the sandstorm capnproto interfaces (especially those in util) into a "common interfaces" capnp file in the capnp project or similar? Things like ByteStream are Generally Useful and it would be a shame if we ended up with lots of incompatible reimplementations
prosody has joined #sandstorm
<dwrensha>
XgF: that's an interesting thought.
<XgF>
Also I could imagine capnp-c++/capnp-rust providing "adaptors" which make things like ByteStream look like their usual byte streams
<dwrensha>
hm. by "usual byte streams" do you mean "those in the standard library"? I guess in Rust that would be std::io::{Read,Write}
<XgF>
I was thinking the same async byte stream abstraction as is used for sockets
<dwrensha>
so more like kj::AsyncIoStream ?
<XgF>
yeah
<XgF>
or gj::io::AsyncRead/AsyncWrite?
|jemc| has joined #sandstorm
<XgF>
I guess a server would be AsyncRead, a client AsyncWrite
<dwrensha>
I'm actually considering making the gj::io stuff more like ByteStream...
<XgF>
As I've said before, I really like Dart's Stream abstraction
<XgF>
It works well for byte streams, it works well for events, it's just Good
<dwrensha>
do you have a link to documentation about it?
<dwrensha>
it would be nice if it acted more like a capnp capability
<dwrensha>
thanks for the links
<XgF>
(I'd see Stream more for AyncRead than AsyncWrite though)
<XgF>
(Dart's Socket class is instructive here: implements Stream<List<int>> (for reads), IOSink for writes)
<XgF>
(where IOSink extends StreamSink, because Inheritance!)
<XgF>
I played around with implementing Streams for GJ and I don't think it went too badly but I'll have to go through a bunch of legal wrangling before I can contribute it =/
frigginglorious has joined #sandstorm
neynah has joined #sandstorm
M-eternaleye has quit [Changing host]
M-eternaleye has joined #sandstorm
M-eternaleye is now known as eternaleye
mnutt has quit [Quit: My Mac has gone to sleep. ZZZzzz…]
tdfischer_ has joined #sandstorm
digitalcircuit_ has joined #sandstorm
indiebio has joined #sandstorm
Zertrin_ has joined #sandstorm
shachaf_ has joined #sandstorm
mcpherrin has joined #sandstorm
todayman_ has joined #sandstorm
aaronr_ has joined #sandstorm
nolski_ has joined #sandstorm
shachaf_ is now known as shachaf
urlproblems has joined #sandstorm
<urlproblems>
hi, is this a good place to ask questions about adding urls? (Sandstorm wordpress question)
kxra has joined #sandstorm
<neynah>
Hi urlproblems what's your question? :)
<urlproblems>
So I Keep getting the "Error looking up DNS TXT records for host". I bought my url on namecheap.
<urlproblems>
I think I filled out the DNS TXT record correctly, but I don't have much experience with DNS
<urlproblems>
"sandstorm-4gi3y5ukp435mte94o4c.oasis.sandstorm.io" under host "4gi3y5ukp435mte94o4c" under value
<ckocagil>
jparyani: any plans to update the ghost port?
<jparyani>
I'd like to, but it's a fair amount of work. The whole auth system completely changed, and it'd be a fair amount of work to fix the port
<jparyani>
Part of the problem is ghost didn't even have the concept of users when I first ported it. We'd have to migrate rousing the new user/auth system
<jparyani>
*to using
jon1012_ has joined #sandstorm
jon1012_ is now known as jon1012
jeddi has quit [Quit: Konversation terminated!]
aaronr_ has quit [Remote host closed the connection]
jon1012 has quit [Ping timeout: 246 seconds]
synchrone has joined #sandstorm
jon1012 has joined #sandstorm
<synchrone>
asheesh: >>presumably browsers will never do WebDAV
<synchrone>
I don't see anything wrong with having browser-based caldav\carddav clients, but realistically for our case maybe it's not so important. My grain has CalDavZAP & CardDavMATE inside itself, so it's talking to a dav-endpoint on a sub-path, which works ok.
<jon1012>
hi
<jon1012>
any idea of support for mobile devices ? right now, the sandstorm bar takes a lot of room, and the browser header doesn't collapse as there is no scroll down
<jon1012>
so quite hard to use on a mobile browser right now
<koenig_DGQ>
The owncloud client will not authenticate
<kentonv>
which client? (e.g. on what OS?)
<koenig_DGQ>
Windows. Just downloaded it today
synchrone has joined #sandstorm
<koenig_DGQ>
When I enter the credentials it says "Connection Terminated"
<koenig_DGQ>
I generated the credentials just seconds ago
<kentonv>
hmm
<kentonv>
I would guess 60% chance it's Oasis's fault, 40% chance Davros
<kentonv>
in the latter case filing a bug on Davros would be the right thing to do
<kentonv>
in the former case, talking to us is the right thing to do. :)
<kentonv>
so let's see
<kentonv>
is this an empty grain?
<koenig_DGQ>
yes
<kentonv>
anything interesting in the debug log? (click the monitor icon in the top bar while the grain is open)
<koenig_DGQ>
wait, I get a 404 on the "files" tab. (uh, should have noted this before, sorry)
<koenig_DGQ>
Starting up grain.
<koenig_DGQ>
sandstorm/supervisor.c++:1144: warning: ip_tables kernel module not loaded; cannot set up transparent network forwarding.
<koenig_DGQ>
Mounting webdav from data dir /var/davros/data
<koenig_DGQ>
Storing temporary files in /var/davros/tmp
<koenig_DGQ>
Davros listening on port 8000
<kentonv>
ignore the ip_tables thing, it's a red herring. We should probably remove that code.
<kentonv>
so the debug log seems normal
<kentonv>
but you say you get a 404 error when you click on "files" in the Davros sidebar?
<koenig_DGQ>
yup. the default page, when opening the grain has the tabs files, clients, ublishing, about and then "404 Not Found
<koenig_DGQ>
We couldn't find this page. Please check the URL to make sure it is correct."
<koenig_DGQ>
s/ublishing/publishing
<kentonv>
well that's pretty strange.
<kentonv>
normally it is pre-loaded with "space.jpg", "voyager.jpg", and "Welcome to Davros.md"
<kentonv>
can you click on "download backup" (the down-arrow in the top bar) and then send the .zip to me? (kenton@sandstorm.io, or share using filedrop)
<kentonv>
assuming this grain never contained anything private
<koenig_DGQ>
It never contained anything since there is no button to upload anything :-)
<koenig_DGQ>
anyway I just created a new davros grain and it has the same problem. Sending it to you in a minute.
<kentonv>
I am not sure if the files 404 issue is related to the connection issue, but the file 404 issue is very strange since it doesn't do that for me, and it's hard to understand how it could behave any different for you, being sandboxed as it is.
<koenig_DGQ>
@kenton I am sorry, but I have to go offline now. Thanks a lot for your help. I will try to get back online in an hour or so or contact you per mail.
synchrone has quit [Read error: Connection reset by peer]
synchrone has joined #sandstorm
synchrone has quit [Client Quit]
synchrone has joined #sandstorm
simonv3 has quit [Quit: Connection closed for inactivity]
neynah has joined #sandstorm
synchrone has quit [Quit: Leaving.]
synchrone has joined #sandstorm
synchrone has quit [Ping timeout: 240 seconds]
synchrone has joined #sandstorm
synchrone has quit [Client Quit]
rustyrazorblade_ has joined #sandstorm
funwhilelost has quit [Quit: My Mac has gone to sleep. ZZZzzz…]
<mrdomino>
kentonv: $5/month droplet
<mrdomino>
512mb RAM, 1 cpu
<mrdomino>
still saw some issues when i upgaded to the $10
<mrdomino>
so i went to the $20 (which also gives me another core to play around with)
<kentonv>
ahhh, yeah Sandstorm is pretty RAM-hungry. And when you run out, Linux will kill random processes.
<mrdomino>
and have been streaming successfully for the last couple days with only a couple intermittent interruptions
<kentonv>
adding swap can also help
<mrdomino>
btw i am about to make a shitton of feature requests against groove basin and the reason is that i fucking love this program
<mrdomino>
i had a swapfile in all the above cases -- didn't seem to help much
<kentonv>
how much swap?
<dwrensha>
for what it's worth, Sandstorm's node process on my Server seems to be leveling off at using around 360MB of RAM. I had been worried that there might be a memory leak, but it seems pretty stable there now.
<dwrensha>
mrdomino: features for upstream to implement, or for Sandstorm to support?
synchrone has joined #sandstorm
<mrdomino>
kentonv: 1GB
<mrdomino>
dwrensha: some for upstream, some for sandstorm
<mrdomino>
definitely don't want to piss off upstream, they seem really awesome
<mrdomino>
sandstorm-relevant, per-user scrobbling (would need upstream work i bet.) also, a stream URL i could put into a phone. upstream, the ability to split up a file into different songs and to queue songs with specific start and end times. fwiw.
<mrdomino>
dwrensha: yeah it looks like it just has a high-ish steady state
<mrdomino>
i see 368MB over here
synchrone has quit [Ping timeout: 252 seconds]
amyers has quit [Ping timeout: 276 seconds]
<zarvox>
dwrensha: capnpc-rust's codegen looks like it's still missing code for a handful of constants, including list constants and string constants, which we use in web-session.capnp - if I wanted to take a crack at those, are there any gotcha's I should be aware of?
<dwrensha>
zarvox: I recommend commenting out the definition of the comments
<zarvox>
ahhhh, because if I just &'static [u8] then it won't necessarily be capnp-word-aligned
<maurer>
dwrensha: PhantomData might be better than an actual u64
<zarvox>
(for Data constants, for instance)
<maurer>
dunno if that works though
<dwrensha>
the easy way to support pointer constants would be to generate an `AlignedData` for each
<maurer>
depends on whether rustc generates alignment directives to llvm, or if llvm is doing it itself
<dwrensha>
PhantomData won't affect alignment, I don't think
<maurer>
Really? :(
<dwrensha>
why would it?
<dwrensha>
the more complete way to support pointer constants would be to include the entire input schemas in the generated code, as capnproto-c++ and capnproto-java do
<dwrensha>
and then for each constant you would store an offset into those Word arrays
<dwrensha>
the idea being that those schemas will help with support for other things
<dwrensha>
like dynamic reflection
<zarvox>
mmmmmm, so that's less trivial than I had hoped at first glance :)
<dwrensha>
the "easy" way might not be actually be that hard. But I wouldn't call it trivial.
<maurer>
dwrensha: I'd also like to have those on hand for future work, given that my hacked up attempt at dynamic types with capnproto-rust basically involved referencing capnpc-rust in the runtime
<dwrensha>
I think the main reason it hasn't gotten done yet is that I want to do it the "complete" way
<zarvox>
That's fair!
<maurer>
dwrensha: No rush, just a +1 on the idea of including the schemas and referencing them
synchrone has joined #sandstorm
<zarvox>
the "complete" way does sound better, on the whole
<eternaleye>
Hey, I'm not finding anything in the docs - is there a way to (as an admin) completely revoke a user's ability to log in? I'm on 141, and tried setting a user as a guest, but they were still able to log in and could access their grains - and there doesn't seem to be any more drastic option available.
<eternaleye>
Similarly, I'm not finding any way (as a user) to revoke a cap that was given out.
<zarvox>
Oh, they were previously an invited user, and you demoted them to a guest, but they can still access/launch their owned grains?
<zarvox>
and you would rather they not?
<kentonv>
eternaleye: is what you really want a way to delete their data? If you deleted all their data, then their ability to log in as a guest doesn't get them anything, because as a guest they can't create new grains.
<kentonv>
unfortunately we don't currently have a way to delete an existing user's data.
<kentonv>
eternaleye: regarding revoking caps, you can revoke share links in the "who has access?" dialog, but due to a bug you currently can't revoke shares sent "by identity" (where you auto-completed their name in the sharing dialog). That will be fixed soon.
synchrone has quit [Ping timeout: 276 seconds]
kecors has quit [Quit: Leaving]
rustyrazorblade_ has quit [Quit: rustyrazorblade_]
<eternaleye>
kentonv: Well, if they can't log in, deleting their data is an implementation detail - and might be incorrect, f.e. if this was "user suspended for an audit, but may be reinstated"
<zarvox>
I see. So you'd like to have some notion of marking either an account or an identity as "deactivated".
<eternaleye>
Pretty much
<eternaleye>
$WORK is looking at Sandstorm, and that's a pretty necessary feature IMO
<zarvox>
And the impact of that would be "that user can no longer log in, their existing sessions are logged out"
<eternaleye>
(I'm the evangelist for Sandstorm here :P)
<zarvox>
grains they own that are shared with others could still run when others open them
<eternaleye>
Yup, that'd be perfect
<maurer>
There's also the potential hole that this person could have shared their own grains with dummy accounts
<maurer>
which they can then log in with
<kentonv>
maurer: well, presumably on an invite-only server it would be hard to set up dummy accounts
<maurer>
kentonv: I thought with an invite only server you could still have a guest account with access to your grains?
<kentonv>
oh, hmm, right
<maurer>
e.g. you hit the share with email link with your legit invited account
<maurer>
and send it to your alt email
<eternaleye>
zarvox: Yes, that's okay - we don't want to lock down code they wrote from others, for example, but we would want to prevent firing tantrums and such
<maurer>
I think that you might actually want two emails here
<maurer>
err, two buttons rather
<maurer>
one button which shuts off their grains, if necessary, and another button which rejects their login
<eternaleye>
zarvox: And creating accounts is something we centralize a bit (because corporate - we're tying it to internal email)
<maurer>
eternaleye: Oh, if it's internal mail my dummy account thing is less of an issue
<eternaleye>
Doing a pass and nuking guest accounts when someone is fired is NBD
<kentonv>
eternaleye: what is your canonical account system? LDAP? Google?
<digitalcircuit>
Delete and Deactivate both seem useful in different circumstances.
peterood_ has joined #sandstorm
<zarvox>
maurer: what's the purpose of the button that shuts off their grains? if their sessions are all terminated, Sandstorm will stop the ones that aren't shared with other users Soon™.
<maurer>
zarvox: Say I give bob the ability to spawn grains on my server
<maurer>
zarvox: I get mad at bob because he decides to run a bitcoin miner
<maurer>
(or something equivalent)
<zarvox>
also, I see value in the "expire all sessions of this user" thing in the event their account was previously compromised, but has been recovered
<maurer>
He predicts that I will be mad, and so shares the grain with himself on several other accounts
<maurer>
Since they're all "guest" logins (which I do want to support, since I have guest users on other grains)
<maurer>
he's now sitting with the same thing he originally wanted, even if I deactivate his account
<kentonv>
I think some sort definition of "users in the organization" is needed here, so that you can say "revoke Bob's shares outside of the org". Fortunately this is something we plan to build soon.
<zarvox>
Ahh. So in that case, you'd want to additionally be able to set Bob's effective quota to zero.
<zarvox>
And force quiescence.
<eternaleye>
kentonv: Cool, that'd resolve my concerns. (We currently just use email)
<kentonv>
eternaleye: we're going to be building out our organization management features in the next couple months, FWIW
<kentonv>
and this is exactly the sort of case we're trying to cover with that
<kentonv>
do you mind me asking, who is your employer? :)
<eternaleye>
kentonv: Startup that makes video scheduling appliances for broadcasters - http://castus.tv
<mrdomino>
asheesh: there isn't a way to get at previously generated capability links is there? because get on radio free mrdomino
<kentonv>
asheesh: I wonder if they only deployed the front-end and don't realize yet that it's not going to work...
<eternaleye>
kentonv: I'm the sysop
<kentonv>
eternaleye: When I tried to load your site I got an Apache 500 error initially, but then I tried www. which merely redirected back to the bare domain but this time it worked.
<kentonv>
just FYI since as a sysop maybe that interests you. :)
<eternaleye>
kentonv: We're having issues with a runaway PHP memory allocation error, yeah
<eternaleye>
kentonv: Doesn't help that the server's been the same since we started up, and is a tiny godaddy POS running RHEL... 5, at best?
<eternaleye>
kentonv: Sadly, haven't had the cycles to replace it and then kill it with fire
bodisiw has left #sandstorm ["Leaving"]
<kentonv>
anyway, cool. You say you're using email login. Is there also an LDAP or AD server internally? (Just curious for product reasons.)
funwhilelost has joined #sandstorm
frigginglorious has quit [Quit: frigginglorious]
frigginglorious has joined #sandstorm
funwhilelost has quit [Quit: My Mac has gone to sleep. ZZZzzz…]
peterood_ has quit []
peterood_ has joined #sandstorm
funwhilelost has joined #sandstorm
simonv3 has joined #sandstorm
mnutt has quit [Quit: My Mac has gone to sleep. ZZZzzz…]
<simonv3>
I was wondering about a social network built on sandstorm where everyone maintains their own app and you can post to people’s apps using sandstorm’s built in permissions, and I was wondering if there was any work being done on a proof of concept for that?
frigginglorious has quit [Ping timeout: 240 seconds]
mnutt has joined #sandstorm
<funwhilelost>
@simonv3 there are a number of social options popping up from the "IndieWeb" that allow you to publish your own social posts and they share them using publish-subscribe services - or directly notifying the other users' software with "webmentions". I am looking at packaging up Known (withknown.com) sometime.
<funwhilelost>
One thing about the current Sandstorm security model: it's difficult to get incoming "pings" because (last I checked) the grains can't stay publicly available.
<funwhilelost>
This might be possible by keeping the webmentions in a pub-sub clearing house of sorts but they haven't quite closed the gap yet
<funwhilelost>
Ooh, great idea. I think the missing piece is getting bearer tokens into the indieweb microformats.
<funwhilelost>
Known just wrapped up their 0.9 release so I'm going to take a look at it.
<simonv3>
awesome
<simonv3>
funwhilelost: let me know if you want/need any help
<funwhilelost>
Great.
<simonv3>
this is something I am pretty excited about
<simonv3>
I’ve heard of known, but haven’t gotten around to installing it
<simonv3>
probably should
<funwhilelost>
Me, too. Have you seen Solid, IPFS, etc.?
<simonv3>
I’ve seen IPFS
<funwhilelost>
I think those present an interesting opportunity to run a social app privately (in Sandstorm) and publish social stuff to a large "graph" of content.
TwoJames has quit [Ping timeout: 276 seconds]
<funwhilelost>
Solid, in particular, leverages Tim Berners-Lee's RDP (linked data) work to make social-over-HTTP possible.
<simonv3>
But I feel like it’s still a bit too low level for me to get fully onto it, though I’m definitely keeping an eye on it (a good friend works for them)
<simonv3>
I haven’t heard of Solid
TwoJames has joined #sandstorm
<funwhilelost>
It's quite clever but I think it might be "too clever by half". IPFS suffers the same thing...
<funwhilelost>
All-in-all it's kind of like bearer tokens on steroids. It's all over HTTP and there's fine-grained access control to URLs.
<asheesh>
BTW I have to say - anyone interested in making IndieWeb stuff work better with Sandstorm, I am definitely interested in helping you.
TwoJames2 has joined #sandstorm
TwoJames has quit [Read error: Connection reset by peer]
<asheesh>
I have too many things going on in Sandstorm-land to focus on that, but if you (e.g. funwhilelost / simonv3 ) are focused on it, then you can use me as a bouncing-off person to clarify ideas and get changes into Sandstorm itself, and so on.
<simonv3>
thanks asheesh
<funwhilelost>
Excellent. I jumped into quite a few projects to test the waters and they're all coming along nicely. I think 0.9 is at a critical mass where I want to package it and see what happens.
<simonv3>
funwhilelost: it’d be interesting to see how little / much you have to change things to get it packaged
<simonv3>
If it’s not that much, I wonder if they’d accept changes to the main project
<simonv3>
thought that might clash with their business model :P
<funwhilelost>
It seems like they're definitely open to help.
<funwhilelost>
They just accepted quite a few PR's and re-wrote the plugins to accommodate some cool features.
<simonv3>
Glad to hear it
<simonv3>
Maybe I’ll give it a go installing it this weekend. Been a bit disillusioned with Ghost recently
<funwhilelost>
I had the same experience. Known doesn't have Markdown support (yet) but otherwise I didn't miss it.
<simonv3>
Easy migration?
rustyrazorblade_ has quit [Quit: rustyrazorblade_]
peterood_ has joined #sandstorm
<funwhilelost>
I didn't migrate any of the data over - just parked the Ghost.
<simonv3>
heh
<simonv3>
I’m becoming attached to my blog data, moved it from Tumblr not too long ago, which involved writing a little script
<simonv3>
invested now :P
<simonv3>
Though I’m also fairly sure that most of the stuff from 4+ years ago is cruft
<funwhilelost>
Yeah, I wish things were more portable, too. I've had quite a few moments lately where I wish I could've archived some of my old web contributions.
peterood_ has quit [Client Quit]
<simonv3>
it’s why I was thinking jekyll was my next step