
Show HN: Graphite Publishing – A decentralized, user owned blogging platform - jhunter1016
https://publishing.graphitedocs.com
======
shopkins
Just a little feedback: as someone not deep in the blockchain world, I have no
idea what Blockstack is, or why nothing happens when I click "sign in" or
"start writing now". The page does a good job of describing the product
benefits, but it doesn't cover square 1 and describe what I need in order to
actually start _using_ the product.

Otherwise I know this was a fun project, but it always helps to hone in on
your audience on the landing page. Answer, Who's going to appreciate this the
most?

~~~
jhunter1016
Thanks! This is really helpful. I'll make sure to get the landing page
updated.

Just so it's covered here, Blockstack is a decentralized application platform.
It provides an authentication strategy that anchors your username/ID to the
bitcoin blockchain. The benefit of this is not having to rely on a central
authority for your username. Example: Google could terminate your access to
your gmail account anytime they want. Graphite/Graphite Publishing can't do
that with your Blockstack username.

As for your question about who would appreciate this most, I think Graphite
Publishing is probably going to benefit people already interested in
decentralization the most initially. However, it really does provide a more
secure solution than using something like Squarespace, for example. If we
stick with the Squarespace example, your content (design and words) are stored
in Squarespace's database. The content can be accessed and changed (or
deleted) by Squarespace at any time. With Graphite Publishing, your content is
stored either in the default storage hub provided by Blockstack and encrypted,
or it's stored in your own custom storage hub if you so choose. In either
case, the content can't be accessed by anyone other than the user creating
that content.

Again, thanks so much for the feedback! I really appreciate it.

~~~
adamredwoods
That clarifies some questions for me: I didn't know that Blockstack stores the
content. The Graphite site looks like it's a hosting platform. The marketing
angle might rely on getting the platform to look like something different or
new, that seems less centralized. I don't know what that is.

~~~
ac4tw
"Blockstack stores the content" \-- today this is true in that you are
provided with a default storage bucket by Blockstack that amounts to Microsoft
Azure space. It's been Blockstack's vision that you could select your own
cloud storage upon account configuration (i.e. your own S3/Dropbox/IPFS
storage), thus decentralizing your data storage away from the App developer.
If you're willing to get your hands dirty, you can theoretically spin up your
own Blockstack GAIA node and store your data there instead of the provided
defaults. More info here:
[https://github.com/blockstack/gaia](https://github.com/blockstack/gaia)

~~~
stdcli
By the end of this month we will have instructions on how to host your own
gaia hub in DO spaces (on Digital Ocean) using the develop branch of gaia in
our Blockstack docs located here:

[https://docs.blockstack.org/](https://docs.blockstack.org/)

So stay tuned.

I personally find Digital Ocean to be the most user friendly, so we are trying
to lower barriers to make it as easy as possible to roll out gaia hubs by
providing instructions for these kind of platforms.

We are also rolling out instructions and images for the major cloud hosting
platforms. If you have any preferences for a particular platform you would
like supported or any other feedback, let me know.

Currently on master branch, gaia supports the following drivers:

Amazon S3, Azure Blob Storage, Local disk (you must set up static web-hosting
to point at this driver), and Google Cloud Storage

You can learn more about how to set up your own gaia hub here:
[https://github.com/blockstack/gaia/blob/master/hub/README.md](https://github.com/blockstack/gaia/blob/master/hub/README.md)

------
jhunter1016
Hey HN!

I'm Justin Hunter, the founder of Graphite. Graphite is a decentralized and
encrypted productivity suite, but the original app stemmed from my desire to
own my writing. I'm a writer at my core, not a programmer, so anything tied to
writing is always important to me, including blogging.

As a fun side project/experiment as an extension of the core Graphite product,
I built Graphite Publishing. It uses Blockstack's authentication system for
decentralized usernames, and it uses Blockstack's Gaia storage for
decentralized storage. What this means is that Graphite Publishing never has
access to any of your blog posts. Everything is encrypted until the moment you
choose to publish it publicly.

The cool thing, in my opinion, is that you can design your entire site.
Graphite Publishing has a built-in HTML editor for your main page and your
individual posts page. Much like the old days of Blogger, where you could
tinker with the underlying code, Graphite Publishing lets you customize your
blog as much as you want...but it's much simpler than Blogger ever was ;)

It's still very much a beta product and will surely have bugs, but I'm excited
to get some feedback and see what the community thinks.

Thanks!

------
52-6F-62
I have a question common to ventures like this, but I'll start with something
objectively positive.

It works well in Chrome, and it seems quite user-friendly. It looks like the
posts/actual site won't really load—or they partially load. But the story
editing, etc works well— just maybe focus on the UX a touch—make publishing
the post easier to find.

Now for the stuff that always bothers me about decentralized publishing
platforms like this—

if nobody can remove or alter your content, what is preventing people from
posting harmful content (need I explain)? It also doesn't sound like there's
any recourse for removal. It also sounds like you intend to monetize the
platform, or at least parts of it. This could render you a provider of paid
services to people who wish to find a space for permanently publishing those
kinds of materials.

As a comparison, a publishing house would not print child pornography in the
name of free speech. They're operating a business— it would be suicide.

I've just never heard a good answer to that one, so I'm curious about your
take.

~~~
jude-
Blockstack engineer here. Your points are well-taken, and are straightforward
to address.

Blockstack uses a storage system called Gaia, which in a nutshell acts as an
overlay on top of existing commodity storage systems (including cloud storage,
your personal server, decentralized storage systems, etc.). Blockstack apps
like Graphite Publishing interact with the user's data via the user's
preferred Gaia hub. The Gaia hub holds the user's storage credentials (if
applicable) and uses a storage driver to store data to the underlying storage
system, so applications don't have to care about interfacing with a specific
storage implementation (Gaia and Blockstack implement their own authentication
mechanism for applications). In the default on-boarding flow, you get signed
up to use a Gaia hub that uses Azure blob storage to host and serve data.

That said, if the operator of your Gaia hub's underlying storage system can
determine that content you store is objectionable, then it would be obliged to
take it down. However, to prevent such power from being abused, the user has
the ability to switch Gaia hubs and migrate their data between Gaia hubs. If
you notice someone storing objectionable material in Blockstack, you should
notify the user's Gaia hub's storage provider so they can take the appropriate
action.

~~~
52-6F-62
This was helpful, thanks. I have to admit ignorance when it come to how
Blockstack works. I had imagined it was more similar to how IPFS/similar
systems functioned, where distributed permanence is a major goal.

~~~
jhunter1016
I think that's what most people think of when they hear of decentralized
protocols. I chose Blockstack for Graphite and for this project specifically
because it handles decentralization differently.

~~~
52-6F-62
Well good luck with it

------
godelski
I have a question about the block chain aspect.

Does blogging need block chain? Can't you be decentralized and encrypted
without BC? From what I'm aware, the benefit of BC is that you get an audit-
able history. Do we need that here? Like I get that it can serve as a backup,
but does that work in practice? By using BC here can I roll back my blog (like
in git)? And do you really need a full history? Couldn't you do just like 10
revisions? I'd even argue that a complete history could be dangerous.

This is a fundamental question that I have with block chain. It seems really
cool, but from what I understand, there are other tools that solve these
problems, don't require as many resources, and work faster.

Am I wrong in this? If so can someone explain?

If I'm right, can someone expand?

~~~
jhunter1016
Thanks for the question! Graphite Publishing only uses blockchain for user
identity. And even then, a user creating an account doesn't really see that in
the experience.

All data is stored in the storage hub of the user's choosing rather than being
stored in a database centralized to Graphite Publishing. In fact, Graphite
Publishing doesn't have access to anyone's data.

But you're right, a blockchain is not necessary for decentralized blogging and
is not used for data storage at all in this app.

~~~
amelius
Can't it use standardized technology for auth / user identity?

I suspect most users don't like dealing with multiple services for the same
thing.

~~~
bcdoubter
And when somebody takes your existing chain then generates a bunch of new
users in a 51% attack, how do you recover the usernames on the alternate
chain?

edit: sorry for reply to wrong post. Should have responded to jhunter1016
below.

~~~
stdcli
The nice thing about Blockstack is it is not dependent on any one Blockchain.
It can be ported to other blockchains and has been previously. Right now it
sits on top of bitcoin as it is very hard to perform a 51% attack.

if Bitcoin was under 51% attack, then we would simply accept the name state on
the best fork. To learn more about how we would handle this case, you can look
here: [https://forum.blockstack.org/t/bitcoin-network-
disruption/13...](https://forum.blockstack.org/t/bitcoin-network-
disruption/1344)

Blockstack Core implements BNS and Atlas, the storage routing system for Gaia.
Blockstack Core nodes form the backbone of the Blockstack network. Each node
indexes the Bitcoin blockchain and maintains a full replica of all names,
public keys, and storage routing information. This makes the Blockstack
network particularly resilient to node failure---applications only need to
talk to a single Blockstack Core node to work, and a new or recovering node
can quickly reconstruct all of its missing state from its peers.

All Atlas nodes lie on top maintain a 100% state replica, and they organize
into an unstructured overlay network. The unstructured approach is easier to
implement, has no overhead for maintaining routing structure and is resilient
against targeted node attacks. When a new Atlas node boots up, it first gets
the index of all data keys and hashes of values stored in the blockchain.
After getting the index, Atlas nodes talk to their peers to fetch key/value
pairs they dont have. The Atlas network implements a K-regular random graph.

Let us know if you have any more questions.

------
jonathanstrange
Very cool. Two questions:

1\. How do you plan to make money with this?

2\. If the data is owned by me, is there also an easy way to get all my blog
posts out of the system in a usable format (e.g. so I could put it on my own
server later)?

~~~
jhunter1016
Thanks for the questions!

Quite honestly, we may not ever charge for this product. But some ideas are:

-Provide a custom Gaia Hub with encrypted storage that has higher limits than the default Blockstack hub. -Charge for additional features (integrations, team publications, etc) -Just charge a small amount for access and allow those who don't want to pay that the option to clone the open source repo and deploy it themselves

An export feature will be built into Graphite Publishing (much like the one
that already exists in Graphite). But one of the core tenets of data ownership
is you should not need to rely on the app to access your data. In that vein,
there is still work to be done. But it is already possible to use the command
line to export all your data without ever touching Graphite Publishing.

All content is in HTML format, so it should be usable in many different apps.

------
indigodaddy
Does Graphite Publishing/Gaia/Blockchain/Blockstack work with traditional
domains? Eg, how/could I hook my custom domain into all this?

~~~
jude-
Blockstack engineer here. AFAIK Graphite Publishing will make your files
accessible as URLs under graphitedocs.com, but since the code is open [1], you
could run an instance on your own domain.

[1] [https://github.com/graphite-docs/graphite-
publishing](https://github.com/graphite-docs/graphite-publishing)

~~~
jhunter1016
Yep this is spot-on. You can clone the repository today and run it on your own
custom domain. Now, doing so will result in kind of a wonky URL structure
unless you customize the code. Your site would live on something like:

[https://yourname.com/sites/[yourblockstackid]](https://yourname.com/sites/\[yourblockstackid\])

But it's definitely an option! In fact, we deployed an example of this to
another Blockstack app (Xor) that hosts static content and it worked like a
charm.

