QTip is a self-hosted text hosting platform that is managed via command-line. A text hosting platform is a service that serves simple text-based content similarly to a blog. The difference between a blog and a text hosting platform is text hosting services are usually meant for infrequently inserted evergreen content.
Some examples of pages that could exist on a text hosting platform:
- Recipes for food
- Lists of favorite software
- Code snippets that are used as reference
QTip provides you the ability to quickly host any text file (with markdown support!) with one line of code.
The line below will serve fried-chicken-recipe.md
on yourdomain.com/recipe/fried-chicken
qtip serve /recipe/fried-chicken fried-chicken-recipe.md
- Markdown file support
- Automatically uploads and stores local images embedded in markdown to your preferred CDN
- 100% self-hosted 🚀
There is a demo of this service here: https://www.useqtip.com/
As of version 0.1.0 QTip takes the contents of a text/markdown/json file and stores it as a attribute of a document in mongodb. The datastructure looks as follows:
{
path: string[]; // the deconstructed url path split into an array by "/"
content: string;
title: string; // auto-generated from the first line of the file
public: boolean;
restrictions?: { ipList: string[] } // optional
}
When a user visits a url on the qtip server, the qtip server will match the url to a path if it exists and returns the content stored in the string.
Let's say a user saves a file under the path /recipies
and then another file under the name /recipies/chicken
. QTip will show a small display on the /recipies
page that indicates there are "children" to the path provided. See this page as an example.
To deploy this service to heroku, follow these instructions:
heroku git:clone -a name-of-your-qtip-heroku-project cd name-of-your-qtip-heroku-project git remote add origin https://github.com/4shub/qtip git pull origin master ```
The instructions for self-hosted docs are located here
Visit your qtip instance and do the following:
cp qtip-config.default.json qtip-config.json
Edit the qtip-config.json
To run the client make sure you have the following installed:
- Python 3.7 or higher
-
Install
pip install qtip-client-cli
-
Set your environment variables
export QTIP_AUTH_TOKEN=the-auth-token-used-to-validate-your-service export QTIP_SERVER=http://your-qtip-server-location.com
-
Go!
qtip help
To use qtip to serve a file, follow these instructions:
-
Navigate or create a file you would like uploaded, and run the following command
qtip serve /path/to/serve filename
-
Files are hidden initially, you can make a file public to the internet by doing the following
qtip public /path/to/serve
Note: files cannot be made private once they go public
Sometimes you don't want a file to be public to everyone. You can instead restrict a file to particular ips by doing the following:
qtip restrictip /path/to/serve 192.0.0.1,145.554.432.33
Please list ips you want to restrict delineated by a comma Note: You can only restrict private files
To delete a file, do the following:
qtip delete /path/to/serve
To preview your document while editing it:
qtip preview /path/to/serve filename
You can preview it with your live site by doing the following as well
qtip preview /path/to/serve filename --live
qtip ls /path
- lists all files within a particular serve routeqtip cat /path/to/file
- displays the file content in terminalqtip get /path/to/file output_file_name.txt
- downloads file content to a specific file name
This project is in active development and would love some helping hands.
This readme is a work in progress!