diff --git a/posts/bio/alex-grintsvayg.md b/content/bio/alex-grintsvayg.md similarity index 100% rename from posts/bio/alex-grintsvayg.md rename to content/bio/alex-grintsvayg.md diff --git a/posts/bio/alex-liebowitz.md b/content/bio/alex-liebowitz.md similarity index 100% rename from posts/bio/alex-liebowitz.md rename to content/bio/alex-liebowitz.md diff --git a/posts/bio/alex-tabarrok.md b/content/bio/alex-tabarrok.md similarity index 100% rename from posts/bio/alex-tabarrok.md rename to content/bio/alex-tabarrok.md diff --git a/posts/bio/jack-robison.md b/content/bio/jack-robison.md similarity index 100% rename from posts/bio/jack-robison.md rename to content/bio/jack-robison.md diff --git a/posts/bio/jeremy-kauffman.md b/content/bio/jeremy-kauffman.md similarity index 100% rename from posts/bio/jeremy-kauffman.md rename to content/bio/jeremy-kauffman.md diff --git a/posts/bio/jimmy-kiselak.md b/content/bio/jimmy-kiselak.md similarity index 100% rename from posts/bio/jimmy-kiselak.md rename to content/bio/jimmy-kiselak.md diff --git a/posts/bio/job-evers-meltzer.md b/content/bio/job-evers-meltzer.md similarity index 100% rename from posts/bio/job-evers-meltzer.md rename to content/bio/job-evers-meltzer.md diff --git a/posts/bio/josh-finer.md b/content/bio/josh-finer.md similarity index 100% rename from posts/bio/josh-finer.md rename to content/bio/josh-finer.md diff --git a/posts/bio/michael-huemer.md b/content/bio/michael-huemer.md similarity index 100% rename from posts/bio/michael-huemer.md rename to content/bio/michael-huemer.md diff --git a/posts/bio/michael-zargham.md b/content/bio/michael-zargham.md similarity index 100% rename from posts/bio/michael-zargham.md rename to content/bio/michael-zargham.md diff --git a/posts/bio/mike-vine.md b/content/bio/mike-vine.md similarity index 100% rename from posts/bio/mike-vine.md rename to content/bio/mike-vine.md diff --git a/posts/bio/ray-carballada.md b/content/bio/ray-carballada.md similarity index 100% rename from posts/bio/ray-carballada.md rename to content/bio/ray-carballada.md diff --git a/posts/bio/reilly-smith.md b/content/bio/reilly-smith.md similarity index 100% rename from posts/bio/reilly-smith.md rename to content/bio/reilly-smith.md diff --git a/posts/bio/stephan-kinsella.md b/content/bio/stephan-kinsella.md similarity index 100% rename from posts/bio/stephan-kinsella.md rename to content/bio/stephan-kinsella.md diff --git a/posts/bounty/bittorrent-support.md b/content/bounty/bittorrent-support.md similarity index 100% rename from posts/bounty/bittorrent-support.md rename to content/bounty/bittorrent-support.md diff --git a/posts/bounty/custom-project.md b/content/bounty/custom-project.md similarity index 100% rename from posts/bounty/custom-project.md rename to content/bounty/custom-project.md diff --git a/posts/bounty/lbry-club.md b/content/bounty/lbry-club.md similarity index 100% rename from posts/bounty/lbry-club.md rename to content/bounty/lbry-club.md diff --git a/posts/bounty/modified-block-explorer.md b/content/bounty/modified-block-explorer.md similarity index 100% rename from posts/bounty/modified-block-explorer.md rename to content/bounty/modified-block-explorer.md diff --git a/posts/bounty/pkg-installer-for-osx.md b/content/bounty/pkg-installer-for-osx.md similarity index 100% rename from posts/bounty/pkg-installer-for-osx.md rename to content/bounty/pkg-installer-for-osx.md diff --git a/posts/bounty/pr-for-lbry.md b/content/bounty/pr-for-lbry.md similarity index 100% rename from posts/bounty/pr-for-lbry.md rename to content/bounty/pr-for-lbry.md diff --git a/posts/bounty/publish-open-content.md b/content/bounty/publish-open-content.md similarity index 100% rename from posts/bounty/publish-open-content.md rename to content/bounty/publish-open-content.md diff --git a/posts/bounty/refer-publisher.md b/content/bounty/refer-publisher.md similarity index 100% rename from posts/bounty/refer-publisher.md rename to content/bounty/refer-publisher.md diff --git a/posts/bounty/slack-greeting.md b/content/bounty/slack-greeting.md similarity index 100% rename from posts/bounty/slack-greeting.md rename to content/bounty/slack-greeting.md diff --git a/posts/bounty/slack-lbry-url-handler.md b/content/bounty/slack-lbry-url-handler.md similarity index 100% rename from posts/bounty/slack-lbry-url-handler.md rename to content/bounty/slack-lbry-url-handler.md diff --git a/posts/bounty/social-media-cover-images.md b/content/bounty/social-media-cover-images.md similarity index 100% rename from posts/bounty/social-media-cover-images.md rename to content/bounty/social-media-cover-images.md diff --git a/posts/bounty/transaction-history.md b/content/bounty/transaction-history.md similarity index 100% rename from posts/bounty/transaction-history.md rename to content/bounty/transaction-history.md diff --git a/posts/bounty/wallet-ui.md b/content/bounty/wallet-ui.md similarity index 100% rename from posts/bounty/wallet-ui.md rename to content/bounty/wallet-ui.md diff --git a/posts/bounty/web-i18n.md b/content/bounty/web-i18n.md similarity index 100% rename from posts/bounty/web-i18n.md rename to content/bounty/web-i18n.md diff --git a/posts/faq/api-help.md b/content/faq/api-help.md similarity index 100% rename from posts/faq/api-help.md rename to content/faq/api-help.md diff --git a/posts/faq/block-rewards.md b/content/faq/block-rewards.md similarity index 100% rename from posts/faq/block-rewards.md rename to content/faq/block-rewards.md diff --git a/posts/faq/blockchain-explorer.md b/content/faq/blockchain-explorer.md similarity index 100% rename from posts/faq/blockchain-explorer.md rename to content/faq/blockchain-explorer.md diff --git a/posts/faq/bounties.md b/content/faq/bounties.md similarity index 100% rename from posts/faq/bounties.md rename to content/faq/bounties.md diff --git a/posts/faq/claimtrie-implementation.md b/content/faq/claimtrie-implementation.md similarity index 100% rename from posts/faq/claimtrie-implementation.md rename to content/faq/claimtrie-implementation.md diff --git a/posts/faq/credit-policy.md b/content/faq/credit-policy.md similarity index 100% rename from posts/faq/credit-policy.md rename to content/faq/credit-policy.md diff --git a/posts/faq/custom-ui.md b/content/faq/custom-ui.md similarity index 100% rename from posts/faq/custom-ui.md rename to content/faq/custom-ui.md diff --git a/posts/faq/earn-credits.md b/content/faq/earn-credits.md similarity index 100% rename from posts/faq/earn-credits.md rename to content/faq/earn-credits.md diff --git a/posts/faq/exchanges.md b/content/faq/exchanges.md similarity index 100% rename from posts/faq/exchanges.md rename to content/faq/exchanges.md diff --git a/posts/faq/gpg-key.md b/content/faq/gpg-key.md similarity index 100% rename from posts/faq/gpg-key.md rename to content/faq/gpg-key.md diff --git a/posts/faq/host-content.md b/content/faq/host-content.md similarity index 100% rename from posts/faq/host-content.md rename to content/faq/host-content.md diff --git a/posts/faq/how-do-i-check-my-lbc-address.md b/content/faq/how-do-i-check-my-lbc-address.md similarity index 100% rename from posts/faq/how-do-i-check-my-lbc-address.md rename to content/faq/how-do-i-check-my-lbc-address.md diff --git a/posts/faq/how-to-backup-wallet.md b/content/faq/how-to-backup-wallet.md similarity index 100% rename from posts/faq/how-to-backup-wallet.md rename to content/faq/how-to-backup-wallet.md diff --git a/posts/faq/how-to-check-hashrate.md b/content/faq/how-to-check-hashrate.md similarity index 100% rename from posts/faq/how-to-check-hashrate.md rename to content/faq/how-to-check-hashrate.md diff --git a/posts/faq/how-to-check-mining-balance.md b/content/faq/how-to-check-mining-balance.md similarity index 100% rename from posts/faq/how-to-check-mining-balance.md rename to content/faq/how-to-check-mining-balance.md diff --git a/posts/faq/how-to-encrypt-wallet.md b/content/faq/how-to-encrypt-wallet.md similarity index 100% rename from posts/faq/how-to-encrypt-wallet.md rename to content/faq/how-to-encrypt-wallet.md diff --git a/posts/faq/how-to-generate-receiving-address.md b/content/faq/how-to-generate-receiving-address.md similarity index 100% rename from posts/faq/how-to-generate-receiving-address.md rename to content/faq/how-to-generate-receiving-address.md diff --git a/posts/faq/how-to-get-lbry-command-line.md b/content/faq/how-to-get-lbry-command-line.md similarity index 100% rename from posts/faq/how-to-get-lbry-command-line.md rename to content/faq/how-to-get-lbry-command-line.md diff --git a/posts/faq/how-to-report-bugs.md b/content/faq/how-to-report-bugs.md similarity index 100% rename from posts/faq/how-to-report-bugs.md rename to content/faq/how-to-report-bugs.md diff --git a/posts/faq/how-to-run-lbry-with-lbrycrdd.md b/content/faq/how-to-run-lbry-with-lbrycrdd.md similarity index 100% rename from posts/faq/how-to-run-lbry-with-lbrycrdd.md rename to content/faq/how-to-run-lbry-with-lbrycrdd.md diff --git a/posts/faq/how-to-run-lbry.md b/content/faq/how-to-run-lbry.md similarity index 100% rename from posts/faq/how-to-run-lbry.md rename to content/faq/how-to-run-lbry.md diff --git a/posts/faq/how-to-stop-lbry.md b/content/faq/how-to-stop-lbry.md similarity index 100% rename from posts/faq/how-to-stop-lbry.md rename to content/faq/how-to-stop-lbry.md diff --git a/posts/faq/is-lbry-open-source.md b/content/faq/is-lbry-open-source.md similarity index 100% rename from posts/faq/is-lbry-open-source.md rename to content/faq/is-lbry-open-source.md diff --git a/posts/faq/lbry-directories.md b/content/faq/lbry-directories.md similarity index 100% rename from posts/faq/lbry-directories.md rename to content/faq/lbry-directories.md diff --git a/posts/faq/mining-credits.md b/content/faq/mining-credits.md similarity index 100% rename from posts/faq/mining-credits.md rename to content/faq/mining-credits.md diff --git a/posts/faq/mining-pools.md b/content/faq/mining-pools.md similarity index 100% rename from posts/faq/mining-pools.md rename to content/faq/mining-pools.md diff --git a/posts/faq/quarterly-report-july-2016.md b/content/faq/quarterly-report-july-2016.md similarity index 100% rename from posts/faq/quarterly-report-july-2016.md rename to content/faq/quarterly-report-july-2016.md diff --git a/posts/faq/referrals.md b/content/faq/referrals.md similarity index 100% rename from posts/faq/referrals.md rename to content/faq/referrals.md diff --git a/posts/faq/to-log-to-console.md b/content/faq/to-log-to-console.md similarity index 100% rename from posts/faq/to-log-to-console.md rename to content/faq/to-log-to-console.md diff --git a/posts/news/01-the-lbry-opens.md b/content/news/01-the-lbry-opens.md similarity index 100% rename from posts/news/01-the-lbry-opens.md rename to content/news/01-the-lbry-opens.md diff --git a/posts/news/02-as-reddit-burns-it-powers-the-world.md b/content/news/02-as-reddit-burns-it-powers-the-world.md similarity index 100% rename from posts/news/02-as-reddit-burns-it-powers-the-world.md rename to content/news/02-as-reddit-burns-it-powers-the-world.md diff --git a/posts/news/03-5-questions-about-lbry.md b/content/news/03-5-questions-about-lbry.md similarity index 100% rename from posts/news/03-5-questions-about-lbry.md rename to content/news/03-5-questions-about-lbry.md diff --git a/posts/news/04-meet-the-lbry-founders.md b/content/news/04-meet-the-lbry-founders.md similarity index 100% rename from posts/news/04-meet-the-lbry-founders.md rename to content/news/04-meet-the-lbry-founders.md diff --git a/posts/news/09-introducing-lbry-the-bitcoin-of-content.md b/content/news/09-introducing-lbry-the-bitcoin-of-content.md similarity index 100% rename from posts/news/09-introducing-lbry-the-bitcoin-of-content.md rename to content/news/09-introducing-lbry-the-bitcoin-of-content.md diff --git a/posts/news/10-slides-from-media-demo.md b/content/news/10-slides-from-media-demo.md similarity index 100% rename from posts/news/10-slides-from-media-demo.md rename to content/news/10-slides-from-media-demo.md diff --git a/posts/news/11-testimony-to-subcommittee-on-hb552-to-legalize-bitcoin-for-payments-of-taxes-and-fees.md b/content/news/11-testimony-to-subcommittee-on-hb552-to-legalize-bitcoin-for-payments-of-taxes-and-fees.md similarity index 100% rename from posts/news/11-testimony-to-subcommittee-on-hb552-to-legalize-bitcoin-for-payments-of-taxes-and-fees.md rename to content/news/11-testimony-to-subcommittee-on-hb552-to-legalize-bitcoin-for-payments-of-taxes-and-fees.md diff --git a/posts/news/12-why-not-use-bitcoin-a-dialogue.md b/content/news/12-why-not-use-bitcoin-a-dialogue.md similarity index 100% rename from posts/news/12-why-not-use-bitcoin-a-dialogue.md rename to content/news/12-why-not-use-bitcoin-a-dialogue.md diff --git a/posts/news/13-mike-vine-joins-lbry-as-technology-evangelist-2.md b/content/news/13-mike-vine-joins-lbry-as-technology-evangelist-2.md similarity index 100% rename from posts/news/13-mike-vine-joins-lbry-as-technology-evangelist-2.md rename to content/news/13-mike-vine-joins-lbry-as-technology-evangelist-2.md diff --git a/posts/news/14-lbry-gets-content-creators-out-of-precarious-position-daily-decrypts-amanda-b-johnson.md b/content/news/14-lbry-gets-content-creators-out-of-precarious-position-daily-decrypts-amanda-b-johnson.md similarity index 100% rename from posts/news/14-lbry-gets-content-creators-out-of-precarious-position-daily-decrypts-amanda-b-johnson.md rename to content/news/14-lbry-gets-content-creators-out-of-precarious-position-daily-decrypts-amanda-b-johnson.md diff --git a/posts/news/15-renowned-ip-attorney-kinsella-joins-lbry-cryptoapp-as-legal-advisor.md b/content/news/15-renowned-ip-attorney-kinsella-joins-lbry-cryptoapp-as-legal-advisor.md similarity index 100% rename from posts/news/15-renowned-ip-attorney-kinsella-joins-lbry-cryptoapp-as-legal-advisor.md rename to content/news/15-renowned-ip-attorney-kinsella-joins-lbry-cryptoapp-as-legal-advisor.md diff --git a/posts/news/16-digging-into-lbry.md b/content/news/16-digging-into-lbry.md similarity index 100% rename from posts/news/16-digging-into-lbry.md rename to content/news/16-digging-into-lbry.md diff --git a/posts/news/17-rpi-hackers-meet-lbry-rcos-presentation.md b/content/news/17-rpi-hackers-meet-lbry-rcos-presentation.md similarity index 100% rename from posts/news/17-rpi-hackers-meet-lbry-rcos-presentation.md rename to content/news/17-rpi-hackers-meet-lbry-rcos-presentation.md diff --git a/posts/news/18-its-time-to-liberate-anne-franks-diary.md b/content/news/18-its-time-to-liberate-anne-franks-diary.md similarity index 100% rename from posts/news/18-its-time-to-liberate-anne-franks-diary.md rename to content/news/18-its-time-to-liberate-anne-franks-diary.md diff --git a/posts/news/19-free-lbry-credits-come-and-get-em.md b/content/news/19-free-lbry-credits-come-and-get-em.md similarity index 100% rename from posts/news/19-free-lbry-credits-come-and-get-em.md rename to content/news/19-free-lbry-credits-come-and-get-em.md diff --git a/posts/news/20-open-a-valve-to-gush-classic-movies.md b/content/news/20-open-a-valve-to-gush-classic-movies.md similarity index 100% rename from posts/news/20-open-a-valve-to-gush-classic-movies.md rename to content/news/20-open-a-valve-to-gush-classic-movies.md diff --git a/posts/news/21-gmu-economist-alex-tabarrok-joins-lbry.md b/content/news/21-gmu-economist-alex-tabarrok-joins-lbry.md similarity index 100% rename from posts/news/21-gmu-economist-alex-tabarrok-joins-lbry.md rename to content/news/21-gmu-economist-alex-tabarrok-joins-lbry.md diff --git a/posts/news/22-building-the-web-3-0-decentralizing-content-in-an-age-of-centralization.md b/content/news/22-building-the-web-3-0-decentralizing-content-in-an-age-of-centralization.md similarity index 100% rename from posts/news/22-building-the-web-3-0-decentralizing-content-in-an-age-of-centralization.md rename to content/news/22-building-the-web-3-0-decentralizing-content-in-an-age-of-centralization.md diff --git a/posts/news/23-bravenewcoin.md b/content/news/23-bravenewcoin.md similarity index 100% rename from posts/news/23-bravenewcoin.md rename to content/news/23-bravenewcoin.md diff --git a/posts/news/24-our-christmas-surprise.md b/content/news/24-our-christmas-surprise.md similarity index 100% rename from posts/news/24-our-christmas-surprise.md rename to content/news/24-our-christmas-surprise.md diff --git a/posts/news/25-huemer-joins-lbry-ethical-advisor.md b/content/news/25-huemer-joins-lbry-ethical-advisor.md similarity index 100% rename from posts/news/25-huemer-joins-lbry-ethical-advisor.md rename to content/news/25-huemer-joins-lbry-ethical-advisor.md diff --git a/posts/news/26-jack-robison-escaped-60-years-in-prison-now-hes-revolutionizing-the-internet.md b/content/news/26-jack-robison-escaped-60-years-in-prison-now-hes-revolutionizing-the-internet.md similarity index 100% rename from posts/news/26-jack-robison-escaped-60-years-in-prison-now-hes-revolutionizing-the-internet.md rename to content/news/26-jack-robison-escaped-60-years-in-prison-now-hes-revolutionizing-the-internet.md diff --git a/posts/news/27-lbry-adds-chief-growth-officer-josh-finer.md b/content/news/27-lbry-adds-chief-growth-officer-josh-finer.md similarity index 100% rename from posts/news/27-lbry-adds-chief-growth-officer-josh-finer.md rename to content/news/27-lbry-adds-chief-growth-officer-josh-finer.md diff --git a/posts/news/28-the-dmcas-chilling-effect-on-security-research-and-innovation.md b/content/news/28-the-dmcas-chilling-effect-on-security-research-and-innovation.md similarity index 100% rename from posts/news/28-the-dmcas-chilling-effect-on-security-research-and-innovation.md rename to content/news/28-the-dmcas-chilling-effect-on-security-research-and-innovation.md diff --git a/posts/news/29-lbry-app-sneak-peak-big-questions-answered-lbry-on-blocktalk-last-night.md b/content/news/29-lbry-app-sneak-peak-big-questions-answered-lbry-on-blocktalk-last-night.md similarity index 100% rename from posts/news/29-lbry-app-sneak-peak-big-questions-answered-lbry-on-blocktalk-last-night.md rename to content/news/29-lbry-app-sneak-peak-big-questions-answered-lbry-on-blocktalk-last-night.md diff --git a/posts/news/30-try-lbry-on-os-x-el-capitan.md b/content/news/30-try-lbry-on-os-x-el-capitan.md similarity index 100% rename from posts/news/30-try-lbry-on-os-x-el-capitan.md rename to content/news/30-try-lbry-on-os-x-el-capitan.md diff --git a/posts/news/31-annefrank2.md b/content/news/31-annefrank2.md similarity index 100% rename from posts/news/31-annefrank2.md rename to content/news/31-annefrank2.md diff --git a/posts/news/32-if-lbry-succeeds-humanity-wins-lbry-ceo-on-lions-of-liberty-podcast.md b/content/news/32-if-lbry-succeeds-humanity-wins-lbry-ceo-on-lions-of-liberty-podcast.md similarity index 100% rename from posts/news/32-if-lbry-succeeds-humanity-wins-lbry-ceo-on-lions-of-liberty-podcast.md rename to content/news/32-if-lbry-succeeds-humanity-wins-lbry-ceo-on-lions-of-liberty-podcast.md diff --git a/posts/news/33-zarghamjoins.md b/content/news/33-zarghamjoins.md similarity index 100% rename from posts/news/33-zarghamjoins.md rename to content/news/33-zarghamjoins.md diff --git a/posts/news/35-why-doesnt-lbry-just-use-bitcoin.md b/content/news/35-why-doesnt-lbry-just-use-bitcoin.md similarity index 100% rename from posts/news/35-why-doesnt-lbry-just-use-bitcoin.md rename to content/news/35-why-doesnt-lbry-just-use-bitcoin.md diff --git a/posts/news/36-built-for-artists-by-autists-lbry-takes-autism-personally.md b/content/news/36-built-for-artists-by-autists-lbry-takes-autism-personally.md similarity index 100% rename from posts/news/36-built-for-artists-by-autists-lbry-takes-autism-personally.md rename to content/news/36-built-for-artists-by-autists-lbry-takes-autism-personally.md diff --git a/posts/news/38-information-gatekeepers-make-our-culture-sick.md b/content/news/38-information-gatekeepers-make-our-culture-sick.md similarity index 100% rename from posts/news/38-information-gatekeepers-make-our-culture-sick.md rename to content/news/38-information-gatekeepers-make-our-culture-sick.md diff --git a/posts/news/39-bandcamp-cool-growing-but-still-take-15-percent.md b/content/news/39-bandcamp-cool-growing-but-still-take-15-percent.md similarity index 100% rename from posts/news/39-bandcamp-cool-growing-but-still-take-15-percent.md rename to content/news/39-bandcamp-cool-growing-but-still-take-15-percent.md diff --git a/posts/news/40-tipping-in-LBC.md b/content/news/40-tipping-in-LBC.md similarity index 100% rename from posts/news/40-tipping-in-LBC.md rename to content/news/40-tipping-in-LBC.md diff --git a/posts/news/41-apple-lost-my-music.md b/content/news/41-apple-lost-my-music.md similarity index 100% rename from posts/news/41-apple-lost-my-music.md rename to content/news/41-apple-lost-my-music.md diff --git a/posts/news/42-bittorrents-new-streaming-service.md b/content/news/42-bittorrents-new-streaming-service.md similarity index 100% rename from posts/news/42-bittorrents-new-streaming-service.md rename to content/news/42-bittorrents-new-streaming-service.md diff --git a/posts/news/43-ultimate-wizard-meet-alex-grin.md b/content/news/43-ultimate-wizard-meet-alex-grin.md similarity index 100% rename from posts/news/43-ultimate-wizard-meet-alex-grin.md rename to content/news/43-ultimate-wizard-meet-alex-grin.md diff --git a/posts/news/44-meet-reilly-smith-storyteller.md b/content/news/44-meet-reilly-smith-storyteller.md similarity index 100% rename from posts/news/44-meet-reilly-smith-storyteller.md rename to content/news/44-meet-reilly-smith-storyteller.md diff --git a/posts/news/45-lbry-blockchain-live-mine-lbc-now.md b/content/news/45-lbry-blockchain-live-mine-lbc-now.md similarity index 100% rename from posts/news/45-lbry-blockchain-live-mine-lbc-now.md rename to content/news/45-lbry-blockchain-live-mine-lbc-now.md diff --git a/posts/news/46-lbry-at-porcfest-first-public-screening-film-via-blockchain.md b/content/news/46-lbry-at-porcfest-first-public-screening-film-via-blockchain.md similarity index 100% rename from posts/news/46-lbry-at-porcfest-first-public-screening-film-via-blockchain.md rename to content/news/46-lbry-at-porcfest-first-public-screening-film-via-blockchain.md diff --git a/posts/news/47-beta-live-declare-independence-big-media.md b/content/news/47-beta-live-declare-independence-big-media.md similarity index 100% rename from posts/news/47-beta-live-declare-independence-big-media.md rename to content/news/47-beta-live-declare-independence-big-media.md diff --git a/posts/news/48-lbry-credits-on-bittrex.md b/content/news/48-lbry-credits-on-bittrex.md similarity index 100% rename from posts/news/48-lbry-credits-on-bittrex.md rename to content/news/48-lbry-credits-on-bittrex.md diff --git a/posts/news/49-mysterious-100k-lbc-revealed.md b/content/news/49-mysterious-100k-lbc-revealed.md similarity index 100% rename from posts/news/49-mysterious-100k-lbc-revealed.md rename to content/news/49-mysterious-100k-lbc-revealed.md diff --git a/posts/news/50-1.2B-market-cap-we-dont-care.md b/content/news/50-1.2B-market-cap-we-dont-care.md similarity index 100% rename from posts/news/50-1.2B-market-cap-we-dont-care.md rename to content/news/50-1.2B-market-cap-we-dont-care.md diff --git a/posts/news/51-launch-a-disaster.md b/content/news/51-launch-a-disaster.md similarity index 100% rename from posts/news/51-launch-a-disaster.md rename to content/news/51-launch-a-disaster.md diff --git a/posts/news/52-day-in-shoes-venezuelan.md b/content/news/52-day-in-shoes-venezuelan.md similarity index 100% rename from posts/news/52-day-in-shoes-venezuelan.md rename to content/news/52-day-in-shoes-venezuelan.md diff --git a/posts/news/53-publish-tools-live-earn-1000-dollars.md b/content/news/53-publish-tools-live-earn-1000-dollars.md similarity index 100% rename from posts/news/53-publish-tools-live-earn-1000-dollars.md rename to content/news/53-publish-tools-live-earn-1000-dollars.md diff --git a/posts/news/54-shapeshift-adds-lbc.md b/content/news/54-shapeshift-adds-lbc.md similarity index 100% rename from posts/news/54-shapeshift-adds-lbc.md rename to content/news/54-shapeshift-adds-lbc.md diff --git a/posts/news/55-fight-of-century.md b/content/news/55-fight-of-century.md similarity index 100% rename from posts/news/55-fight-of-century.md rename to content/news/55-fight-of-century.md diff --git a/posts/news/56-mde-on-lbry.md b/content/news/56-mde-on-lbry.md similarity index 100% rename from posts/news/56-mde-on-lbry.md rename to content/news/56-mde-on-lbry.md diff --git a/posts/news/57-lbry-bounties.md b/content/news/57-lbry-bounties.md similarity index 100% rename from posts/news/57-lbry-bounties.md rename to content/news/57-lbry-bounties.md diff --git a/posts/news/58-reweighting-wait-list.md b/content/news/58-reweighting-wait-list.md similarity index 100% rename from posts/news/58-reweighting-wait-list.md rename to content/news/58-reweighting-wait-list.md diff --git a/posts/news/59-ui-publishing-tools-upgrades.md b/content/news/59-ui-publishing-tools-upgrades.md similarity index 100% rename from posts/news/59-ui-publishing-tools-upgrades.md rename to content/news/59-ui-publishing-tools-upgrades.md diff --git a/posts/news/60-heckbender-charney-on-lbry.md b/content/news/60-heckbender-charney-on-lbry.md similarity index 100% rename from posts/news/60-heckbender-charney-on-lbry.md rename to content/news/60-heckbender-charney-on-lbry.md diff --git a/posts/news/61-nsfw-lbry-settings.md b/content/news/61-nsfw-lbry-settings.md similarity index 100% rename from posts/news/61-nsfw-lbry-settings.md rename to content/news/61-nsfw-lbry-settings.md diff --git a/posts/news/62-content-without-borders.md b/content/news/62-content-without-borders.md similarity index 100% rename from posts/news/62-content-without-borders.md rename to content/news/62-content-without-borders.md diff --git a/posts/news/63-joaquin-pixan-singleton-band.md b/content/news/63-joaquin-pixan-singleton-band.md similarity index 100% rename from posts/news/63-joaquin-pixan-singleton-band.md rename to content/news/63-joaquin-pixan-singleton-band.md diff --git a/posts/news/64-500k-vc-funds-pillar.md b/content/news/64-500k-vc-funds-pillar.md similarity index 100% rename from posts/news/64-500k-vc-funds-pillar.md rename to content/news/64-500k-vc-funds-pillar.md diff --git a/posts/other/slack-greeting.md b/content/other/slack-greeting.md similarity index 100% rename from posts/other/slack-greeting.md rename to content/other/slack-greeting.md diff --git a/posts/press-kit.md b/content/press-kit.md similarity index 100% rename from posts/press-kit.md rename to content/press-kit.md diff --git a/posts/press/500k-fundraising-round-pillar-vc.md b/content/press/500k-fundraising-round-pillar-vc.md similarity index 100% rename from posts/press/500k-fundraising-round-pillar-vc.md rename to content/press/500k-fundraising-round-pillar-vc.md diff --git a/posts/press/testing.md b/content/press/testing.md similarity index 100% rename from posts/press/testing.md rename to content/press/testing.md diff --git a/controller/Controller.class.php b/controller/Controller.class.php index 767e1bca..68f5e93b 100644 --- a/controller/Controller.class.php +++ b/controller/Controller.class.php @@ -121,7 +121,7 @@ class Controller $router->get([ContentActions::URL_NEWS . '/{slug:c}?', 'news'], 'ContentActions::executeNews'); $router->get([ContentActions::URL_FAQ . '/{slug:c}?', 'faq'], 'ContentActions::executeFaq'); - $router->get([BountyActions::URL_BOUNTY . '/{slug:c}?', 'bounty'], 'BountyActions::executeList'); + $router->get([ContentActions::URL_BOUNTY . '/{slug:c}?', 'bounty'], 'ContentActions::executeBounty'); $router->get([ContentActions::URL_PRESS . '/{slug:c}', 'press'], 'ContentActions::executePress'); $router->any(['/signup{whatever}?', 'signup'], 'DownloadActions::executeSignup'); diff --git a/controller/action/BountyActions.class.php b/controller/action/BountyActions.class.php deleted file mode 100644 index d483f1fa..00000000 --- a/controller/action/BountyActions.class.php +++ /dev/null @@ -1,63 +0,0 @@ - $postHtml, - 'metadata' => $metadata - ]]; - } - - $allBounties = Post::find(ROOT_DIR . '/posts/bounty'); - - $allCategories = ['' => ''] + Post::collectMetadata($allBounties, 'category'); - $allStatuses = ['' => ''] + array_merge(Post::collectMetadata($allBounties, 'status'), ['complete' => 'unavailable']); - - $selectedStatus = Request::getParam('status', 'available'); - $selectedCategory = Request::getParam('category'); - - $filters = array_filter([ - 'category' => $selectedCategory && isset($allCategories[$selectedCategory]) ? $selectedCategory : null, - 'status' => $selectedStatus && isset($allStatuses[$selectedStatus]) ? $selectedStatus : null - ]); - - $bounties = $filters ? Post::filter($allBounties, $filters) : $allBounties; - - uasort($bounties, function($postA, $postB) { - $metadataA = $postA->getMetadata(); - $metadataB = $postB->getMetadata(); - $awardA = strpos('-', $metadataA['award']) !== false ? rtrim(explode('-', $metadataA['award'])[0], '+') : $metadataA['award']; - $awardB = strpos('-', $metadataB['award']) !== false ? rtrim(explode('-', $metadataB['award'])[0], '+') : $metadataB['award']; - if ($awardA != $awardB) - { - return $awardA > $awardB ? -1 : 1; - } - return $metadataA['title'] < $metadataB['title'] ? -1 : 1; - }); - - return ['bounty/list', [ - 'bounties' => $bounties, - 'categories' => $allCategories, - 'statuses' => $allStatuses, - 'selectedCategory' => $selectedCategory, - 'selectedStatus' => $selectedStatus - ]]; - } -} \ No newline at end of file diff --git a/controller/action/ContentActions.class.php b/controller/action/ContentActions.class.php index f35a98ab..fe74cdd6 100644 --- a/controller/action/ContentActions.class.php +++ b/controller/action/ContentActions.class.php @@ -7,14 +7,19 @@ class ContentActions extends Actions SLUG_NEWS = 'news', SLUG_FAQ = 'faq', SLUG_PRESS = 'press', + SLUG_BOUNTY = 'bounty', URL_NEWS = '/' . self::SLUG_NEWS, URL_FAQ = '/' . self::SLUG_FAQ, URL_PRESS = '/' . self::SLUG_PRESS, + URL_BOUNTY = '/' . self::SLUG_BOUNTY, - VIEW_FOLDER_NEWS = ROOT_DIR . '/posts/' . self::SLUG_NEWS, - VIEW_FOLDER_FAQ = ROOT_DIR . '/posts/' . self::SLUG_FAQ, - VIEW_FOLDER_PRESS = ROOT_DIR . '/posts/' . self::SLUG_PRESS; + CONTENT_DIR = ROOT_DIR . '/content', + + VIEW_FOLDER_NEWS = self::CONTENT_DIR . '/' . self::SLUG_NEWS, + VIEW_FOLDER_FAQ = self::CONTENT_DIR . '/' . self::SLUG_FAQ, + VIEW_FOLDER_BOUNTY = self::CONTENT_DIR . '/' . self::SLUG_BOUNTY, + VIEW_FOLDER_PRESS = self::CONTENT_DIR . '/' . self::SLUG_PRESS; public static function executeHome(): array { @@ -133,7 +138,61 @@ class ContentActions extends Actions return ['content/press-post', ['post' => $post]]; } - public static function executePressKit(): array + public static function executeBounty(string $slug = null): array + { + Response::enableHttpCache(); + + if ($slug) + { + list($metadata, $postHtml) = View::parseMarkdown(ContentActions::VIEW_FOLDER_BOUNTY . '/' . $slug . '.md'); + if (!$postHtml) + { + return NavActions::execute404(); + } + + return ['bounty/show', [ + 'postHtml' => $postHtml, + 'metadata' => $metadata + ]]; + } + + $allBounties = Post::find(static::CONTENT_DIR . '/bounty'); + + $allCategories = ['' => ''] + Post::collectMetadata($allBounties, 'category'); + $allStatuses = ['' => ''] + array_merge(Post::collectMetadata($allBounties, 'status'), ['complete' => 'unavailable']); + + $selectedStatus = Request::getParam('status', 'available'); + $selectedCategory = Request::getParam('category'); + + $filters = array_filter([ + 'category' => $selectedCategory && isset($allCategories[$selectedCategory]) ? $selectedCategory : null, + 'status' => $selectedStatus && isset($allStatuses[$selectedStatus]) ? $selectedStatus : null + ]); + + $bounties = $filters ? Post::filter($allBounties, $filters) : $allBounties; + + uasort($bounties, function($postA, $postB) { + $metadataA = $postA->getMetadata(); + $metadataB = $postB->getMetadata(); + $awardA = strpos('-', $metadataA['award']) !== false ? rtrim(explode('-', $metadataA['award'])[0], '+') : $metadataA['award']; + $awardB = strpos('-', $metadataB['award']) !== false ? rtrim(explode('-', $metadataB['award'])[0], '+') : $metadataB['award']; + if ($awardA != $awardB) + { + return $awardA > $awardB ? -1 : 1; + } + return $metadataA['title'] < $metadataB['title'] ? -1 : 1; + }); + + return ['bounty/list', [ + 'bounties' => $bounties, + 'categories' => $allCategories, + 'statuses' => $allStatuses, + 'selectedCategory' => $selectedCategory, + 'selectedStatus' => $selectedStatus + ]]; + } + + public static function executePressKit(): array { $zipFileName = 'lbry-press-kit-' . date('Y-m-d') . '.zip'; $zipPath = tempnam('/tmp', $zipFileName); @@ -165,7 +224,7 @@ class ContentActions extends Actions $zip->addFile($productImgPath, '/logo_and_product/' . $imgName); } - foreach (glob(ROOT_DIR . '/posts/bio/*.md') as $bioPath) + foreach (glob(ContentActions::CONTENT_DIR . '/bio/*.md') as $bioPath) { list($metadata, $bioHtml) = View::parseMarkdown($bioPath); $zip->addFile($bioPath, '/team_bios/' . $metadata['name'] . ' - ' . $metadata['role'] . '.txt'); diff --git a/model/Post.class.php b/model/Post.class.php index 3378b5e6..cc71f700 100644 --- a/model/Post.class.php +++ b/model/Post.class.php @@ -19,11 +19,12 @@ class Post { throw new LogicException('Cannot load a post without a path.'); } + $postType = $pathTokens[count($pathTokens) - 2]; $filename = $pathTokens[count($pathTokens) - 1]; $isRelative = $relativeOrAbsolutePath[0] != '/'; $slug = strpos($filename, '.md') !== false ? static::getSlugFromFilename($filename) : $filename; - $path = ($isRelative ? ROOT_DIR . '/posts/' : '') . + $path = ($isRelative ? ContentActions::CONTENT_DIR . '/' : '') . $relativeOrAbsolutePath . (substr($filename, -3) !== '.md' ? '.md' : ''); @@ -366,7 +367,7 @@ class Post if (!isset(static::$slugMap[$postType])) { static::$slugMap[$postType] = []; - foreach(glob(ROOT_DIR . '/posts/' . $postType . '/*.md') as $file) + foreach(glob(ContentActions::CONTENT_DIR . '/' . $postType . '/*.md') as $file) { static::$slugMap[$postType][static::getSlugFromFilename($file)] = $file; } diff --git a/posts/37-art.md b/posts/37-art.md deleted file mode 100644 index fbe2c954..00000000 --- a/posts/37-art.md +++ /dev/null @@ -1,236 +0,0 @@ ---- -author: jeremy, zargham, jack -title: Art in the Internet Age -date: '2016-03-21 20:06:18' -cover: /img/altamira-bison.jpg ---- - -## Introduction - -In 34,000 B.C., there were cave paintings. And that’s it. When you came home from a sweltering August day of foraging along the Vézère river, the only form of non-live art or entertainment available was something like the above buffalo. - -Today, we live in a world of near infinite choices. This is true not just for art but for all kinds of things (like potato chips). Since the era of cave art, humanity has incessantly and progressively trended towards interconnected, more efficient, and increasingly transparent markets. This undercurrent of connectedness and openness has affected everything human beings produce. - -Nerds like us like to speculate about the end-game of this trend with others on the internet. What will society be like when we have a "Star Trek"-like capacity to instantly and freely replicate anything that exists? The term for this society is _post-scarcity_[1](#note-post-scarcity). - -Generally, post-scarcity is regarded as fantastical; something that will never happen in our lifetimes. Except for one area: digital goods. - -Art in the internet age is infinitely reproducible and easily shared. This is a sea change from any prior time in history. Previously, vinyl records captured audio in physical grooves; tapes captured data on magnetic strips; compact disks held digital files read by lasers — in each of these cases physical, medium-specific hardware is required to both produce and recover the bits of data that made up the digital content. - -Today art is just data, a string of 1s and 0s, a _number_, and we no longer need any specialized hardware to decode and enjoy digital content. We use the same technological methods to access a personal photograph a single time as we do to watch a blockbuster on Netflix. - -This is a big step forward from the past. As production costs fall to zero, choices go up. Digital distributors provide virtually every song, film, photo or book for purchase and download to any internet enabled device. Technology has also decreased the cost of production — it has never been easier for aspirant artists to achieve a following through self-publishing. - -The digitization of art has added a lot of value to both content creators and consumers, reducing costs and increasing choice. This transition is still in its infancy. With LBRY, we’re going to make it a little more mature. - - - -## A People’s Marketplace - -LBRY is the first digital marketplace to be controlled by the market’s participants rather than a corporation or other 3rd-party. It is the most open, fair, and efficient marketplace for digital goods ever created, with an incentive design encouraging it to become the most complete. - -At the highest level, LBRY does something extraordinarily simple. LBRY creates an association between a unique name and a piece of digital content, such as a movie, book, or game. This is similar to the domain name system that you are most likely using to access this very post. - -
- -However, LBRY does this not through a proprietary service or network, but as a _protocol_, or a method of doing things, much like HTTP, DNS and other specifications that make up the internet itself. Just as many different domains owned by many different companies all speak a shared language, so too can any person or company speak LBRY. No special access or permission is needed. - -LBRY differs from the status quo in three big ways: - -1. **Coupled payment and access**. If desired, the person who publishes to [lbry://wonderfullife](lbry://wonderfullife) can charge a fee to users that view the content. -2. **Decentralized and distributed**. Content published to LBRY is not specific to one computer or network. No one party, including us, can unilaterally remove or block content on the LBRY network. (If it worries you that LBRY could facilitate unsavory content, this is discussed in its own section.) -3. **Domain names are controlled via ongoing auction**. This facilitates names being controlled by the publishers that value them most. These transactions take place via an electronic currency called LBRY credits, or _LBC_. This is covered in more detail, below. - -While creating a protocol that we ourselves cannot control sounds chaotic, it is actually about establishing trust. Every other publishing system requires trusting an intermediary that can unilaterally change the rules on you. What happens when you build your business on YouTube or Amazon and they change fees? Or Apple drops your content because the Premier of China thought your comedy went to far? - -Only LBRY consists of a known, promised set of rules that no one can unilaterally change. LBRY provides this by doing something unique: leaving the _users_ in control rather than demanding that control for itself. - -## A Sample Use - -Let’s look at a sample use of LBRY, Ernest releasing a film on LBRY that is later purchased and viewed by Hilary. - -1. Ernest wants to release his comedy-horror film, _Ernie Goes To Guantanamo Bay_. -2. The content is encrypted and sliced into many pieces. These pieces are stored by hosts. -3. Ernest reserves [lbry://erniebythebay](lbry://erniebythebay), a name pointing to his content. -4. When Ernest reserves the location, he also submits metadata, such as a description and thumbnail. -5. Hillary, a user, browses the LBRY network and decides she wants to watch the film. -6. Hillary issues a payment to Ernest for the decryption key, allowing her to watch the film. -7. Hillary’s LBRY client collects the pieces from the hosts and reassembles them, using the key to decrypt the pieces (if necessary). This is transparent to Hillary, the film streams within a few seconds after purchase. - -This is a lot like an interaction that can happen on many different sites on the web, except that this one happens via a network that is completely decentralized. The data and technology that makes the entire interaction possible is not reliant on nor controlled by any single entity (as it would be via YouTube, Amazon, etc.). - -## The LBRY Network - -To understand precisely what LBRY is and why it matters, one must understand both LBRY as a protocol and the services the protocol enables. HTTP is the protocol that makes web browsing possible, but it would be of little interest without the service of a web browser! - -To understand LBRY, think of LBRY in terms of two layers: _protocol_ and _service._ The protocol provides a fundamental, underlying technological capability. The service layer utilizes the protocol to do something that a human being would actually find useful. - -For a user using LBRY at the service level, the magic of what the LBRY protocol does will be largely transparent, much as a typical internet user sees nothing of how HTTP works. Via a LBRY application, a user will be able to open a familiar interface to quickly and easily discover and purchase a piece of digital content published by anyone in the world. - -However, such an application would not be possible without the LBRY the underlying layer, the LBRY protocol. - -### Layer 1: Protocol - -While the protocol is one comprehensive set of rules, it is easier to understand as two parts. - -#### Part A: The LBRY Blockchain - -A _blockchain_, or _distributed ledger_ is the key innovation behind the Bitcoin network. Blockchains solved the very complicated technological problem of having a bunch of distributed, disparate entities all agree on a rivalrous state of affairs (like how much money they owe each other). - -Like Bitcoin, the LBRY blockchain maintain balances -- in this case, balances of _LBC_, LBRY’s unit of credit. More importantly, the LBRY blockchain also provides a decentralized lookup and metadata storage system. The LBRY blockchain supports a specific set of commands that allows anyone to bid (in LBC) to control a LBRY _name_, which is a lot like a domain name. Whoever controls a name gets to describe what it contains, what it costs to access, who to pay, and where to find it. These names are sold in a continuous running auction. We will talk more about this system a little later on. - -If you’re a programmer, you might recognize the LBRY blockchain as a _key-value store_. Each key, or name, corresponds to a value, or a metadata entry. Whichever party or parties bid the most LBC gets to control the metadata returned by a key lookup. - -Here is a sample key-value entry in the LBRY blockchain. Here, wonderfullife is the key, and the rest of the description is the value. - -wonderfullife : { - title: "It’s a Wonderful Life", - description: "An angel helps a compassionate but despairingly frustrated businessman by showing what life would have been like if he never existed.", - thumbnail: "http://i.imgur.com/MW45x88.jpg", - license: "public domain", - price: 0, //free! - publisher: "A Fan Of George Bailey", //simplification - sources: { //extensible, variable list - lbry_hash :- -`, - url : - } - }