{"action":"created","issue":{"url":"https://api.github.com/repos/up-for-grabs/up-for-grabs.net/issues/323","labels_url":"https://api.github.com/repos/up-for-grabs/up-for-grabs.net/issues/323/labels{/name}","comments_url":"https://api.github.com/repos/up-for-grabs/up-for-grabs.net/issues/323/comments","events_url":"https://api.github.com/repos/up-for-grabs/up-for-grabs.net/issues/323/events","html_url":"https://github.com/up-for-grabs/up-for-grabs.net/issues/323","id":125054693,"number":323,"title":"Alternate site generation concept","user":{"login":"daveaglick","id":1020407,"avatar_url":"https://avatars.githubusercontent.com/u/1020407?v=3","gravatar_id":"","url":"https://api.github.com/users/daveaglick","html_url":"https://github.com/daveaglick","followers_url":"https://api.github.com/users/daveaglick/followers","following_url":"https://api.github.com/users/daveaglick/following{/other_user}","gists_url":"https://api.github.com/users/daveaglick/gists{/gist_id}","starred_url":"https://api.github.com/users/daveaglick/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/daveaglick/subscriptions","organizations_url":"https://api.github.com/users/daveaglick/orgs","repos_url":"https://api.github.com/users/daveaglick/repos","events_url":"https://api.github.com/users/daveaglick/events{/privacy}","received_events_url":"https://api.github.com/users/daveaglick/received_events","type":"User","site_admin":false},"labels":[],"state":"open","locked":false,"assignee":null,"milestone":null,"comments":5,"created_at":"2016-01-05T21:24:38Z","updated_at":"2016-02-01T16:17:45Z","closed_at":null,"body":"Alternate issue title: \"oh, boy, what has Dave gone and done now...\"\r\n\r\nSo I promised I would prepare a proof of concept for an alternative direction you could take for site generation. I finally got a couple hours to rig this up, and I think the timing is good since it looks like you're starting to think about more dynamic concepts (such as standing up an API).\r\n\r\nFirst, a philosophical point: I personally don't think anything about this site requires anything other than a static build. That's debatable of course, but my own explorations have led me to believe that there are a lot of sites that could be purely static if it weren't for the limitations of their available tools.\r\n\r\nBasically, I migrated the site to [Wyam](http://wyam.io).\r\n\r\nThe repo is here (I didn't want to drop a PR bomb at this point): https://github.com/daveaglick/up-for-grabs.net/tree/master\r\nIt's live here: http://up-for-grabs.azurewebsites.net/\r\n\r\nRight now, all functionality from the current site is implemented. It's a fully static site, including a minimum of JavaScript calls to outside services. For example, the issue counts are captured at build time and baked into the page.\r\n\r\nIn addition, some notes and additional features:\r\n\r\n- Pagination (#303) is currently implemented.\r\n- Processing Markdown in the project descriptions and rendering at build time is implemented (#288).\r\n- Gathering statistics at build time without the need for a database should also be relatively easy (#285) - my current thought here is that the \"old\" value can be fetched from the published site using data attributes, thus making the site itself something of the stats database (more on this later if we move forward).\r\n- GitHub rate limiting should be less of an issue since it'll get built once on the server and the clients won't need to all the API (#261).\r\n- You probably can't easily build it yourself right now - it uses the latest Wyam so you'd need to download that and build it from source before building the site. That's easily fixed down the line.\r\n\r\nI also have some ideas on how to leverage the static build process to enhance things:\r\n\r\n- We could add a side pane that displays a project's rendered readme without leaving the site - we'd just fetch the readme HTML from the API at build time for each project and create a local HTML page for it, then load it via Ajax into the DOM when needed.\r\n- We could do something similar but for issues for each project - I.e., click a link and get a quick view of all the issues for a given project. In fact, I've already got the build storing the issues for each project, so we could even create a master issues list over all projects that would be sortable, pageable, etc.\r\n- We could improve the stats by showing graphs or sparklines with issue count changes, committers, etc. - all of which would be fetched at build time and then stored in the generated HTML for the next build.\r\n\r\nThe idea would be to set this up on a CI server that can build on commits and at regular intervals (perhaps every hour). I've already got AppVeyor scripts to do this for a Wyam build, but I would hope other CI servers would be similar.\r\n\r\nAnyway, this was fun to take on. I've been wanting to try applying Wyam to a fairly complex build that wasn't mine just to see how far I got. Turns out it worked great. However, I recognize this may not be the direction you guys want to head, and that's okay too - I knew going in this was a bit of a flyer.\r\n\r\nEye candy:\r\n\r\n![2016-01-05_15h51_16](https://cloud.githubusercontent.com/assets/1020407/12127958/3db87fa4-b3c8-11e5-80a3-592e346d2de9.png)\r\n\r\n![2016-01-05_15h50_56](https://cloud.githubusercontent.com/assets/1020407/12127959/405e1b7e-b3c8-11e5-886c-9426eafd452a.png)"},"comment":{"url":"https://api.github.com/repos/up-for-grabs/up-for-grabs.net/issues/comments/178050612","html_url":"https://github.com/up-for-grabs/up-for-grabs.net/issues/323#issuecomment-178050612","issue_url":"https://api.github.com/repos/up-for-grabs/up-for-grabs.net/issues/323","id":178050612,"user":{"login":"montogeek","id":1002461,"avatar_url":"https://avatars.githubusercontent.com/u/1002461?v=3","gravatar_id":"","url":"https://api.github.com/users/montogeek","html_url":"https://github.com/montogeek","followers_url":"https://api.github.com/users/montogeek/followers","following_url":"https://api.github.com/users/montogeek/following{/other_user}","gists_url":"https://api.github.com/users/montogeek/gists{/gist_id}","starred_url":"https://api.github.com/users/montogeek/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/montogeek/subscriptions","organizations_url":"https://api.github.com/users/montogeek/orgs","repos_url":"https://api.github.com/users/montogeek/repos","events_url":"https://api.github.com/users/montogeek/events{/privacy}","received_events_url":"https://api.github.com/users/montogeek/received_events","type":"User","site_admin":false},"created_at":"2016-02-01T16:17:45Z","updated_at":"2016-02-01T16:17:45Z","body":"@daveaglick Oh, I see, I like how it looks. I asked because I wanted to contribute.\r\nSo, we should wait for a PR to start working on other issues?"}}