Proposal - Sigle - Open-source writing platform for Web3 content creators

Update Milestone #1

The Stacks specification is now done as the last CAIP-122 pull request has been merged in the namespaces repository!
When reviewing the js-did pull request, @zfer mentioned that the fact that getAccountId was not mandatory, so while waiting for the Stacks wallet to have a way to get the current network ID, the pull request is ready for review. Hope it will get merged soon so we can continue with the demo.
I began discussions with the Hiro team this week for a blog post article and have decided it will be published at the end of February or beginning of March to align with EthDenver dates.

Update Milestone #2

Please note that all our code is open-source and can be viewed at GitHub - sigle/sigle: A beautiful decentralized and open source blog maker

Last week we began work on the next version of Sigle and set up all the necessary boilerplate. We have chosen the following tech stack: react/next.js, stitches, radix, connectkit, wagmi, ethers, composeDB, relay, zustand, react-hook-form. Our new design system components can be viewed at https://design.sigle.io/.

This week, we’ve been diving into the exciting world of Ceramic integration! We’ve begun crafting our app schemas and constructing the initial pages that communicate with ComposeDB. Our new app can be viewed at https://next.sigle.io/. Note that the staging ceramic node is not set up yet so you will get an error trying to use it. Will get the node deployed next week.

Settings page

We’ve now added a user profile page where individuals can input their information.

ComposeDB Schema:

type Profile
  @createModel(accountRelation: SINGLE, description: "Sigle profile") {
  # Custom display name of a profile.
  displayName: String @string(minLength: 3, maxLength: 80)
  # Bio of a profile.
  description: String @string(minLength: 3, maxLength: 300)
  # Website URL of a profile.
  websiteUrl: String @string(minLength: 3, maxLength: 2000)
  # Twitter username of a profile.
  twitterUsername: String @string(minLength: 3, maxLength: 1000)
}

Page:

Draft page

We’ve also started the work on the Draft page.

ComposeDB Schema:

type Post @createModel(accountRelation: LIST, description: "sigle post") {
  author: DID! @documentAccount
  version: CommitID! @documentVersion
  # The title of a publication.
  title: String! @string(minLength: 10, maxLength: 100)
  # The content of a publication.
  content: String! @string(minLength: 1, maxLength: 100000)
  # The cover image of a publication.
  featuredImage: String @string(minLength: 3, maxLength: 2000)
  # Meta description of a publication used for SEO.
  metaTitle: String @string(minLength: 3, maxLength: 150)
  # Meta description of a publication used for SEO.
  metaDescription: String @string(minLength: 3, maxLength: 300)
  # Meta image of a publication used for SEO.
  metaImage: String @string(minLength: 3, maxLength: 2000)
  # The canonical URL of a publication.
  canonicalUrl: String @string(minLength: 3, maxLength: 2000)
}

Page:

Improvements proposals

While integrating ComposeDB, I submitted the following ideas/improvements in the forum:

Challenges

The next challenge we will face will be the current limitations around GraphQL queries. As one can filter the queries based on some fields, we will have to download the full data in memory and filter it there.

What’s next

Next, we will focus on getting the essential features up and running, this includes: editor, draft / publish, public profile and app feed! :rocket:

You can see the updates on Twitter at any time in this thread:
https://twitter.com/leopradel/status/1615361101658738688

3 Likes