Repository files navigation

Haven

Haven is a private blog application built with Ruby on Rails. Write what you want, create accounts for people you want to share with, keep up with each other using built-in RSS.

Try out a live demo at https://havenweb.org/demo.html

The following are some motivating philosophies:

  • Open-source. MIT License
  • Privacy-first. This is for sharing with friends and family, not commercial endevors. If you want a blog for your company, you probably want to use WordPress or Ghost instead.
  • Easy to use. Built-in web interface for managing users, customizing the blog, and writing/editing posts with markdown and live-preview.
  • Low-bandwidth friendly. Images get downscaled to reduce page load times. No javascript frameworks. No ads or trackers.
  • Customizable. Add custom CSS or fonts.
  • No spam. There is no self-signup for users so there is no place for unauthorized users to impact your life.
  • Media support for images, videos, and audio.
  • Private RSS feeds for your friends to follow you.
  • Build-in RSS reader to follow your favorite blogs.

Deployment

PikaPods

Run on PikaPods

PikaPods is a great platform for hosting open source apps. They currently offer a $5 credit for new members and it costs as little as $1.64/month to host your Haven on PikaPods. You don't even need to give them a credit card to get the $5 credit and try out Haven for a couple of months.

KubeSail

KubeSail is a self-hosting platform that makes it easier to run a server in your home or office that runs websites & apps. You can install Haven on Kubesail with the following Kubesail template: https://kubesail.com/template/jphj/haven

AWS

  • Register an account with AWS, the included scripts deploy to an AWS EC2 instance
  • Buy a domain with AWS route 53, this is the domain that will point to the blog
  • Setup your AWS credentials: https://docs.aws.amazon.com/sdk-for-java/v1/developer-guide/setup-credentials.html
  • Clone this project onto your computer (tested with Mac OS Mojave and Ubuntu 18.04)
  • Go to the deploymentscripts folder
  • Execute ruby deploy-aws.rb <domain> "<email>"
    • Put your email address in quotes, this email is used for registering your HTTPS certificate
  • Wait. Deployment can take 20 minutes.
  • The script will show you your login information, enjoy your blog
  • Note: if anything goes wrong, you can run ruby cleanup-aws.rb <domain> to tear down everything the script created
  • If you get this error: cannot load such file -- aws-sdk-ec2 (LoadError), then type gem install aws-sdk and try again

Raspberry Pi

Note, this requires a little bit more technical knowledge. You should know how to flash an SD card and how to use the tools ssh and scp. You should also be able to configure your own DNS and port forwarding. We're doing this fully headless, not plugging in a display or mouse/keybord to the Raspberry Pi.

Heroku

Deploy

The Heroku install is meant for exploration and experimentation as images uploaded to your Haven will usually disapear within 24 hours and the reader will not automatically update until you visit the reader page. The Heroku install requires a Heroku account and should fall under Heroku's free-tier. Update: Heroku is eliminating their free tier, Haven on Heroku will probably cost ~$16/month.

Paid Hosting

Fully managed hosting of your personal Haven is available too, check out: https://havenweb.org/order.html

Docker

  1. Install docker and docker-compose
    If you don't know how to install docker and docker-compose, you can find info in introduction to docker , overview of installing docker compose and get docker desktop.

  2. Clone the repository: git clone https://github.com/havenweb/haven.git

  3. Run cd haven

  4. Run docker compose up

Feel free to use the included Dockerfile and docker-compose.yml. You probably want to modify the env vars in docker-compose.yml to specify a different HAVEN_USER_EMAIL and HAVEN_USER_PASS. These will be used to create you initial user (and password) on startup.

Docker images are published to the GitHub Container Registry

Other Linux Systems

Given the differences between Linux platforms I can't give fool-proof deployment instructions for every platform but take a look at the Raspberry PI deployment script. It is not universal, but it should be pretty close for most debian-based systems.

About

Self-hostable private blogging

Resources

Code of conduct

Security policy

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

Repository files navigation

Haven

Haven is a private blog application built with Ruby on Rails. Write what you want, create accounts for people you want to share with, keep up with each other using built-in RSS.

Try out a live demo at https://havenweb.org/demo.html

The following are some motivating philosophies:

  • Open-source. MIT License
  • Privacy-first. This is for sharing with friends and family, not commercial endevors. If you want a blog for your company, you probably want to use WordPress or Ghost instead.
  • Easy to use. Built-in web interface for managing users, customizing the blog, and writing/editing posts with markdown and live-preview.
  • Low-bandwidth friendly. Images get downscaled to reduce page load times. No javascript frameworks. No ads or trackers.
  • Customizable. Add custom CSS or fonts.
  • No spam. There is no self-signup for users so there is no place for unauthorized users to impact your life.
  • Media support for images, videos, and audio.
  • Private RSS feeds for your friends to follow you.
  • Build-in RSS reader to follow your favorite blogs.

Deployment

PikaPods

Run on PikaPods

PikaPods is a great platform for hosting open source apps. They currently offer a $5 credit for new members and it costs as little as $1.64/month to host your Haven on PikaPods. You don't even need to give them a credit card to get the $5 credit and try out Haven for a couple of months.

KubeSail

KubeSail is a self-hosting platform that makes it easier to run a server in your home or office that runs websites & apps. You can install Haven on Kubesail with the following Kubesail template: https://kubesail.com/template/jphj/haven

AWS

  • Register an account with AWS, the included scripts deploy to an AWS EC2 instance
  • Buy a domain with AWS route 53, this is the domain that will point to the blog
  • Setup your AWS credentials: https://docs.aws.amazon.com/sdk-for-java/v1/developer-guide/setup-credentials.html
  • Clone this project onto your computer (tested with Mac OS Mojave and Ubuntu 18.04)
  • Go to the deploymentscripts folder
  • Execute ruby deploy-aws.rb <domain> "<email>"
    • Put your email address in quotes, this email is used for registering your HTTPS certificate
  • Wait. Deployment can take 20 minutes.
  • The script will show you your login information, enjoy your blog
  • Note: if anything goes wrong, you can run ruby cleanup-aws.rb <domain> to tear down everything the script created
  • If you get this error: cannot load such file -- aws-sdk-ec2 (LoadError), then type gem install aws-sdk and try again

Raspberry Pi

Note, this requires a little bit more technical knowledge. You should know how to flash an SD card and how to use the tools ssh and scp. You should also be able to configure your own DNS and port forwarding. We're doing this fully headless, not plugging in a display or mouse/keybord to the Raspberry Pi.

Heroku

Deploy

The Heroku install is meant for exploration and experimentation as images uploaded to your Haven will usually disapear within 24 hours and the reader will not automatically update until you visit the reader page. The Heroku install requires a Heroku account and should fall under Heroku's free-tier. Update: Heroku is eliminating their free tier, Haven on Heroku will probably cost ~$16/month.

Paid Hosting

Fully managed hosting of your personal Haven is available too, check out: https://havenweb.org/order.html

Docker

  1. Install docker and docker-compose
    If you don't know how to install docker and docker-compose, you can find info in introduction to docker , overview of installing docker compose and get docker desktop.

  2. Clone the repository: git clone https://github.com/havenweb/haven.git

  3. Run cd haven

  4. Run docker compose up

Feel free to use the included Dockerfile and docker-compose.yml. You probably want to modify the env vars in docker-compose.yml to specify a different HAVEN_USER_EMAIL and HAVEN_USER_PASS. These will be used to create you initial user (and password) on startup.

Docker images are published to the GitHub Container Registry

Other Linux Systems

Given the differences between Linux platforms I can't give fool-proof deployment instructions for every platform but take a look at the Raspberry PI deployment script. It is not universal, but it should be pretty close for most debian-based systems.

About

Self-hostable private blogging

Resources

Code of conduct

Security policy

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

Haven

Haven is a private blog application built with Ruby on Rails. Write what you want, create accounts for people you want to share with, keep up with each other using built-in RSS.

Try out a live demo at https://havenweb.org/demo.html

The following are some motivating philosophies:

  • Open-source. MIT License
  • Privacy-first. This is for sharing with friends and family, not commercial endevors. If you want a blog for your company, you probably want to use WordPress or Ghost instead.
  • Easy to use. Built-in web interface for managing users, customizing the blog, and writing/editing posts with markdown and live-preview.
  • Low-bandwidth friendly. Images get downscaled to reduce page load times. No javascript frameworks. No ads or trackers.
  • Customizable. Add custom CSS or fonts.
  • No spam. There is no self-signup for users so there is no place for unauthorized users to impact your life.
  • Media support for images, videos, and audio.
  • Private RSS feeds for your friends to follow you.
  • Build-in RSS reader to follow your favorite blogs.

Deployment

PikaPods

Run on PikaPods

PikaPods is a great platform for hosting open source apps. They currently offer a $5 credit for new members and it costs as little as $1.64/month to host your Haven on PikaPods. You don't even need to give them a credit card to get the $5 credit and try out Haven for a couple of months.

KubeSail

KubeSail is a self-hosting platform that makes it easier to run a server in your home or office that runs websites & apps. You can install Haven on Kubesail with the following Kubesail template: https://kubesail.com/template/jphj/haven

AWS

  • Register an account with AWS, the included scripts deploy to an AWS EC2 instance
  • Buy a domain with AWS route 53, this is the domain that will point to the blog
  • Setup your AWS credentials: https://docs.aws.amazon.com/sdk-for-java/v1/developer-guide/setup-credentials.html
  • Clone this project onto your computer (tested with Mac OS Mojave and Ubuntu 18.04)
  • Go to the deploymentscripts folder
  • Execute ruby deploy-aws.rb <domain> "<email>"
    • Put your email address in quotes, this email is used for registering your HTTPS certificate
  • Wait. Deployment can take 20 minutes.
  • The script will show you your login information, enjoy your blog
  • Note: if anything goes wrong, you can run ruby cleanup-aws.rb <domain> to tear down everything the script created
  • If you get this error: cannot load such file -- aws-sdk-ec2 (LoadError), then type gem install aws-sdk and try again

Raspberry Pi

Note, this requires a little bit more technical knowledge. You should know how to flash an SD card and how to use the tools ssh and scp. You should also be able to configure your own DNS and port forwarding. We're doing this fully headless, not plugging in a display or mouse/keybord to the Raspberry Pi.

Heroku

Deploy

The Heroku install is meant for exploration and experimentation as images uploaded to your Haven will usually disapear within 24 hours and the reader will not automatically update until you visit the reader page. The Heroku install requires a Heroku account and should fall under Heroku's free-tier. Update: Heroku is eliminating their free tier, Haven on Heroku will probably cost ~$16/month.

Paid Hosting

Fully managed hosting of your personal Haven is available too, check out: https://havenweb.org/order.html

Docker

  1. Install docker and docker-compose
    If you don't know how to install docker and docker-compose, you can find info in introduction to docker , overview of installing docker compose and get docker desktop.

  2. Clone the repository: git clone https://github.com/havenweb/haven.git

  3. Run cd haven

  4. Run docker compose up

Feel free to use the included Dockerfile and docker-compose.yml. You probably want to modify the env vars in docker-compose.yml to specify a different HAVEN_USER_EMAIL and HAVEN_USER_PASS. These will be used to create you initial user (and password) on startup.

Docker images are published to the GitHub Container Registry

Other Linux Systems

Given the differences between Linux platforms I can't give fool-proof deployment instructions for every platform but take a look at the Raspberry PI deployment script. It is not universal, but it should be pretty close for most debian-based systems.

About

Self-hostable private blogging

Resources

Code of conduct

Security policy

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

Haven

Haven is a private blog application built with Ruby on Rails. Write what you want, create accounts for people you want to share with, keep up with each other using built-in RSS.

Try out a live demo at https://havenweb.org/demo.html

The following are some motivating philosophies:

  • Open-source. MIT License
  • Privacy-first. This is for sharing with friends and family, not commercial endevors. If you want a blog for your company, you probably want to use WordPress or Ghost instead.
  • Easy to use. Built-in web interface for managing users, customizing the blog, and writing/editing posts with markdown and live-preview.
  • Low-bandwidth friendly. Images get downscaled to reduce page load times. No javascript frameworks. No ads or trackers.
  • Customizable. Add custom CSS or fonts.
  • No spam. There is no self-signup for users so there is no place for unauthorized users to impact your life.
  • Media support for images, videos, and audio.
  • Private RSS feeds for your friends to follow you.
  • Build-in RSS reader to follow your favorite blogs.

Deployment

PikaPods

Run on PikaPods

PikaPods is a great platform for hosting open source apps. They currently offer a $5 credit for new members and it costs as little as $1.64/month to host your Haven on PikaPods. You don't even need to give them a credit card to get the $5 credit and try out Haven for a couple of months.

KubeSail

KubeSail is a self-hosting platform that makes it easier to run a server in your home or office that runs websites & apps. You can install Haven on Kubesail with the following Kubesail template: https://kubesail.com/template/jphj/haven

AWS

  • Register an account with AWS, the included scripts deploy to an AWS EC2 instance
  • Buy a domain with AWS route 53, this is the domain that will point to the blog
  • Setup your AWS credentials: https://docs.aws.amazon.com/sdk-for-java/v1/developer-guide/setup-credentials.html
  • Clone this project onto your computer (tested with Mac OS Mojave and Ubuntu 18.04)
  • Go to the deploymentscripts folder
  • Execute ruby deploy-aws.rb <domain> "<email>"
    • Put your email address in quotes, this email is used for registering your HTTPS certificate
  • Wait. Deployment can take 20 minutes.
  • The script will show you your login information, enjoy your blog
  • Note: if anything goes wrong, you can run ruby cleanup-aws.rb <domain> to tear down everything the script created
  • If you get this error: cannot load such file -- aws-sdk-ec2 (LoadError), then type gem install aws-sdk and try again

Raspberry Pi

Note, this requires a little bit more technical knowledge. You should know how to flash an SD card and how to use the tools ssh and scp. You should also be able to configure your own DNS and port forwarding. We're doing this fully headless, not plugging in a display or mouse/keybord to the Raspberry Pi.

Heroku

Deploy

The Heroku install is meant for exploration and experimentation as images uploaded to your Haven will usually disapear within 24 hours and the reader will not automatically update until you visit the reader page. The Heroku install requires a Heroku account and should fall under Heroku's free-tier. Update: Heroku is eliminating their free tier, Haven on Heroku will probably cost ~$16/month.

Paid Hosting

Fully managed hosting of your personal Haven is available too, check out: https://havenweb.org/order.html

Docker

  1. Install docker and docker-compose
    If you don't know how to install docker and docker-compose, you can find info in introduction to docker , overview of installing docker compose and get docker desktop.

  2. Clone the repository: git clone https://github.com/havenweb/haven.git

  3. Run cd haven

  4. Run docker compose up

Feel free to use the included Dockerfile and docker-compose.yml. You probably want to modify the env vars in docker-compose.yml to specify a different HAVEN_USER_EMAIL and HAVEN_USER_PASS. These will be used to create you initial user (and password) on startup.

Docker images are published to the GitHub Container Registry

Other Linux Systems

Given the differences between Linux platforms I can't give fool-proof deployment instructions for every platform but take a look at the Raspberry PI deployment script. It is not universal, but it should be pretty close for most debian-based systems.

About

Self-hostable private blogging

Resources

Code of conduct

Security policy

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

Repository files navigation

Haven

Haven is a private blog application built with Ruby on Rails. Write what you want, create accounts for people you want to share with, keep up with each other using built-in RSS.

Try out a live demo at https://havenweb.org/demo.html

The following are some motivating philosophies:

  • Open-source. MIT License
  • Privacy-first. This is for sharing with friends and family, not commercial endevors. If you want a blog for your company, you probably want to use WordPress or Ghost instead.
  • Easy to use. Built-in web interface for managing users, customizing the blog, and writing/editing posts with markdown and live-preview.
  • Low-bandwidth friendly. Images get downscaled to reduce page load times. No javascript frameworks. No ads or trackers.
  • Customizable. Add custom CSS or fonts.
  • No spam. There is no self-signup for users so there is no place for unauthorized users to impact your life.
  • Media support for images, videos, and audio.
  • Private RSS feeds for your friends to follow you.
  • Build-in RSS reader to follow your favorite blogs.

Deployment

PikaPods

Run on PikaPods

PikaPods is a great platform for hosting open source apps. They currently offer a $5 credit for new members and it costs as little as $1.64/month to host your Haven on PikaPods. You don't even need to give them a credit card to get the $5 credit and try out Haven for a couple of months.

KubeSail

KubeSail is a self-hosting platform that makes it easier to run a server in your home or office that runs websites & apps. You can install Haven on Kubesail with the following Kubesail template: https://kubesail.com/template/jphj/haven

AWS

  • Register an account with AWS, the included scripts deploy to an AWS EC2 instance
  • Buy a domain with AWS route 53, this is the domain that will point to the blog
  • Setup your AWS credentials: https://docs.aws.amazon.com/sdk-for-java/v1/developer-guide/setup-credentials.html
  • Clone this project onto your computer (tested with Mac OS Mojave and Ubuntu 18.04)
  • Go to the deploymentscripts folder
  • Execute ruby deploy-aws.rb <domain> "<email>"
    • Put your email address in quotes, this email is used for registering your HTTPS certificate
  • Wait. Deployment can take 20 minutes.
  • The script will show you your login information, enjoy your blog
  • Note: if anything goes wrong, you can run ruby cleanup-aws.rb <domain> to tear down everything the script created
  • If you get this error: cannot load such file -- aws-sdk-ec2 (LoadError), then type gem install aws-sdk and try again

Raspberry Pi

Note, this requires a little bit more technical knowledge. You should know how to flash an SD card and how to use the tools ssh and scp. You should also be able to configure your own DNS and port forwarding. We're doing this fully headless, not plugging in a display or mouse/keybord to the Raspberry Pi.

Heroku

Deploy

The Heroku install is meant for exploration and experimentation as images uploaded to your Haven will usually disapear within 24 hours and the reader will not automatically update until you visit the reader page. The Heroku install requires a Heroku account and should fall under Heroku's free-tier. Update: Heroku is eliminating their free tier, Haven on Heroku will probably cost ~$16/month.

Paid Hosting

Fully managed hosting of your personal Haven is available too, check out: https://havenweb.org/order.html

Docker

  1. Install docker and docker-compose
    If you don't know how to install docker and docker-compose, you can find info in introduction to docker , overview of installing docker compose and get docker desktop.

  2. Clone the repository: git clone https://github.com/havenweb/haven.git

  3. Run cd haven

  4. Run docker compose up

Feel free to use the included Dockerfile and docker-compose.yml. You probably want to modify the env vars in docker-compose.yml to specify a different HAVEN_USER_EMAIL and HAVEN_USER_PASS. These will be used to create you initial user (and password) on startup.

Docker images are published to the GitHub Container Registry

Other Linux Systems

Given the differences between Linux platforms I can't give fool-proof deployment instructions for every platform but take a look at the Raspberry PI deployment script. It is not universal, but it should be pretty close for most debian-based systems.

About

Self-hostable private blogging

Resources

Code of conduct

Security policy

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

Haven

Haven is a private blog application built with Ruby on Rails. Write what you want, create accounts for people you want to share with, keep up with each other using built-in RSS.

Try out a live demo at https://havenweb.org/demo.html

The following are some motivating philosophies:

  • Open-source. MIT License
  • Privacy-first. This is for sharing with friends and family, not commercial endevors. If you want a blog for your company, you probably want to use WordPress or Ghost instead.
  • Easy to use. Built-in web interface for managing users, customizing the blog, and writing/editing posts with markdown and live-preview.
  • Low-bandwidth friendly. Images get downscaled to reduce page load times. No javascript frameworks. No ads or trackers.
  • Customizable. Add custom CSS or fonts.
  • No spam. There is no self-signup for users so there is no place for unauthorized users to impact your life.
  • Media support for images, videos, and audio.
  • Private RSS feeds for your friends to follow you.
  • Build-in RSS reader to follow your favorite blogs.

Deployment

PikaPods

Run on PikaPods

PikaPods is a great platform for hosting open source apps. They currently offer a $5 credit for new members and it costs as little as $1.64/month to host your Haven on PikaPods. You don't even need to give them a credit card to get the $5 credit and try out Haven for a couple of months.

KubeSail

KubeSail is a self-hosting platform that makes it easier to run a server in your home or office that runs websites & apps. You can install Haven on Kubesail with the following Kubesail template: https://kubesail.com/template/jphj/haven

AWS

  • Register an account with AWS, the included scripts deploy to an AWS EC2 instance
  • Buy a domain with AWS route 53, this is the domain that will point to the blog
  • Setup your AWS credentials: https://docs.aws.amazon.com/sdk-for-java/v1/developer-guide/setup-credentials.html
  • Clone this project onto your computer (tested with Mac OS Mojave and Ubuntu 18.04)
  • Go to the deploymentscripts folder
  • Execute ruby deploy-aws.rb <domain> "<email>"
    • Put your email address in quotes, this email is used for registering your HTTPS certificate
  • Wait. Deployment can take 20 minutes.
  • The script will show you your login information, enjoy your blog
  • Note: if anything goes wrong, you can run ruby cleanup-aws.rb <domain> to tear down everything the script created
  • If you get this error: cannot load such file -- aws-sdk-ec2 (LoadError), then type gem install aws-sdk and try again

Raspberry Pi

Note, this requires a little bit more technical knowledge. You should know how to flash an SD card and how to use the tools ssh and scp. You should also be able to configure your own DNS and port forwarding. We're doing this fully headless, not plugging in a display or mouse/keybord to the Raspberry Pi.

Heroku

Deploy

The Heroku install is meant for exploration and experimentation as images uploaded to your Haven will usually disapear within 24 hours and the reader will not automatically update until you visit the reader page. The Heroku install requires a Heroku account and should fall under Heroku's free-tier. Update: Heroku is eliminating their free tier, Haven on Heroku will probably cost ~$16/month.

Paid Hosting

Fully managed hosting of your personal Haven is available too, check out: https://havenweb.org/order.html

Docker

  1. Install docker and docker-compose
    If you don't know how to install docker and docker-compose, you can find info in introduction to docker , overview of installing docker compose and get docker desktop.

  2. Clone the repository: git clone https://github.com/havenweb/haven.git

  3. Run cd haven

  4. Run docker compose up

Feel free to use the included Dockerfile and docker-compose.yml. You probably want to modify the env vars in docker-compose.yml to specify a different HAVEN_USER_EMAIL and HAVEN_USER_PASS. These will be used to create you initial user (and password) on startup.

Docker images are published to the GitHub Container Registry

Other Linux Systems

Given the differences between Linux platforms I can't give fool-proof deployment instructions for every platform but take a look at the Raspberry PI deployment script. It is not universal, but it should be pretty close for most debian-based systems.

About

Self-hostable private blogging

Resources

Code of conduct

Security policy

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

Haven

Haven is a private blog application built with Ruby on Rails. Write what you want, create accounts for people you want to share with, keep up with each other using built-in RSS.

Try out a live demo at https://havenweb.org/demo.html

The following are some motivating philosophies:

  • Open-source. MIT License
  • Privacy-first. This is for sharing with friends and family, not commercial endevors. If you want a blog for your company, you probably want to use WordPress or Ghost instead.
  • Easy to use. Built-in web interface for managing users, customizing the blog, and writing/editing posts with markdown and live-preview.
  • Low-bandwidth friendly. Images get downscaled to reduce page load times. No javascript frameworks. No ads or trackers.
  • Customizable. Add custom CSS or fonts.
  • No spam. There is no self-signup for users so there is no place for unauthorized users to impact your life.
  • Media support for images, videos, and audio.
  • Private RSS feeds for your friends to follow you.
  • Build-in RSS reader to follow your favorite blogs.

Deployment

PikaPods

Run on PikaPods

PikaPods is a great platform for hosting open source apps. They currently offer a $5 credit for new members and it costs as little as $1.64/month to host your Haven on PikaPods. You don't even need to give them a credit card to get the $5 credit and try out Haven for a couple of months.

KubeSail

KubeSail is a self-hosting platform that makes it easier to run a server in your home or office that runs websites & apps. You can install Haven on Kubesail with the following Kubesail template: https://kubesail.com/template/jphj/haven

AWS

  • Register an account with AWS, the included scripts deploy to an AWS EC2 instance
  • Buy a domain with AWS route 53, this is the domain that will point to the blog
  • Setup your AWS credentials: https://docs.aws.amazon.com/sdk-for-java/v1/developer-guide/setup-credentials.html
  • Clone this project onto your computer (tested with Mac OS Mojave and Ubuntu 18.04)
  • Go to the deploymentscripts folder
  • Execute ruby deploy-aws.rb <domain> "<email>"
    • Put your email address in quotes, this email is used for registering your HTTPS certificate
  • Wait. Deployment can take 20 minutes.
  • The script will show you your login information, enjoy your blog
  • Note: if anything goes wrong, you can run ruby cleanup-aws.rb <domain> to tear down everything the script created
  • If you get this error: cannot load such file -- aws-sdk-ec2 (LoadError), then type gem install aws-sdk and try again

Raspberry Pi

Note, this requires a little bit more technical knowledge. You should know how to flash an SD card and how to use the tools ssh and scp. You should also be able to configure your own DNS and port forwarding. We're doing this fully headless, not plugging in a display or mouse/keybord to the Raspberry Pi.

Heroku

Deploy

The Heroku install is meant for exploration and experimentation as images uploaded to your Haven will usually disapear within 24 hours and the reader will not automatically update until you visit the reader page. The Heroku install requires a Heroku account and should fall under Heroku's free-tier. Update: Heroku is eliminating their free tier, Haven on Heroku will probably cost ~$16/month.

Paid Hosting

Fully managed hosting of your personal Haven is available too, check out: https://havenweb.org/order.html

Docker

  1. Install docker and docker-compose
    If you don't know how to install docker and docker-compose, you can find info in introduction to docker , overview of installing docker compose and get docker desktop.

  2. Clone the repository: git clone https://github.com/havenweb/haven.git

  3. Run cd haven

  4. Run docker compose up

Feel free to use the included Dockerfile and docker-compose.yml. You probably want to modify the env vars in docker-compose.yml to specify a different HAVEN_USER_EMAIL and HAVEN_USER_PASS. These will be used to create you initial user (and password) on startup.

Docker images are published to the GitHub Container Registry

Other Linux Systems

Given the differences between Linux platforms I can't give fool-proof deployment instructions for every platform but take a look at the Raspberry PI deployment script. It is not universal, but it should be pretty close for most debian-based systems.

About

Self-hostable private blogging

Resources

Code of conduct

Security policy

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

Repository files navigation

Haven

Haven is a private blog application built with Ruby on Rails. Write what you want, create accounts for people you want to share with, keep up with each other using built-in RSS.

Try out a live demo at https://havenweb.org/demo.html

The following are some motivating philosophies:

  • Open-source. MIT License
  • Privacy-first. This is for sharing with friends and family, not commercial endevors. If you want a blog for your company, you probably want to use WordPress or Ghost instead.
  • Easy to use. Built-in web interface for managing users, customizing the blog, and writing/editing posts with markdown and live-preview.
  • Low-bandwidth friendly. Images get downscaled to reduce page load times. No javascript frameworks. No ads or trackers.
  • Customizable. Add custom CSS or fonts.
  • No spam. There is no self-signup for users so there is no place for unauthorized users to impact your life.
  • Media support for images, videos, and audio.
  • Private RSS feeds for your friends to follow you.
  • Build-in RSS reader to follow your favorite blogs.

Deployment

PikaPods

Run on PikaPods

PikaPods is a great platform for hosting open source apps. They currently offer a $5 credit for new members and it costs as little as $1.64/month to host your Haven on PikaPods. You don't even need to give them a credit card to get the $5 credit and try out Haven for a couple of months.

KubeSail

KubeSail is a self-hosting platform that makes it easier to run a server in your home or office that runs websites & apps. You can install Haven on Kubesail with the following Kubesail template: https://kubesail.com/template/jphj/haven

AWS

  • Register an account with AWS, the included scripts deploy to an AWS EC2 instance
  • Buy a domain with AWS route 53, this is the domain that will point to the blog
  • Setup your AWS credentials: https://docs.aws.amazon.com/sdk-for-java/v1/developer-guide/setup-credentials.html
  • Clone this project onto your computer (tested with Mac OS Mojave and Ubuntu 18.04)
  • Go to the deploymentscripts folder
  • Execute ruby deploy-aws.rb <domain> "<email>"
    • Put your email address in quotes, this email is used for registering your HTTPS certificate
  • Wait. Deployment can take 20 minutes.
  • The script will show you your login information, enjoy your blog
  • Note: if anything goes wrong, you can run ruby cleanup-aws.rb <domain> to tear down everything the script created
  • If you get this error: cannot load such file -- aws-sdk-ec2 (LoadError), then type gem install aws-sdk and try again

Raspberry Pi

Note, this requires a little bit more technical knowledge. You should know how to flash an SD card and how to use the tools ssh and scp. You should also be able to configure your own DNS and port forwarding. We're doing this fully headless, not plugging in a display or mouse/keybord to the Raspberry Pi.

Heroku

Deploy

The Heroku install is meant for exploration and experimentation as images uploaded to your Haven will usually disapear within 24 hours and the reader will not automatically update until you visit the reader page. The Heroku install requires a Heroku account and should fall under Heroku's free-tier. Update: Heroku is eliminating their free tier, Haven on Heroku will probably cost ~$16/month.

Paid Hosting

Fully managed hosting of your personal Haven is available too, check out: https://havenweb.org/order.html

Docker

  1. Install docker and docker-compose
    If you don't know how to install docker and docker-compose, you can find info in introduction to docker , overview of installing docker compose and get docker desktop.

  2. Clone the repository: git clone https://github.com/havenweb/haven.git

  3. Run cd haven

  4. Run docker compose up

Feel free to use the included Dockerfile and docker-compose.yml. You probably want to modify the env vars in docker-compose.yml to specify a different HAVEN_USER_EMAIL and HAVEN_USER_PASS. These will be used to create you initial user (and password) on startup.

Docker images are published to the GitHub Container Registry

Other Linux Systems

Given the differences between Linux platforms I can't give fool-proof deployment instructions for every platform but take a look at the Raspberry PI deployment script. It is not universal, but it should be pretty close for most debian-based systems.

About

Self-hostable private blogging

Resources

Code of conduct

Security policy

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages