Coder Social home page Coder Social logo

remark's Introduction

Remark

Remark is a fun social reader app built for iOS and macOS in swift. It is currently in progress and is not in a buildable or shippable state. The goal is to be in beta Summer 2019 and release sometime in Fall 2019.

For more information, please see this blog post

remark's People

Contributors

edwardhinkle avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar

remark's Issues

Find a way to save and “follow” conversations.

There are a couple types of conversations you would want to follow:

  • an IndieWeb conversation (this would need to find a way to go both up and down the webmention tree by following in-reply-to and commented posts that can be parsed off of pages). You would probably save this based on the primary post’s url

  • a micro.blog conversation (using the micro.blog api)

  • a twitter conversation (using either XRay or granary). Essentially recreating a conversation view like Tweetbot, but allowing you to easily return to that conversation to see new posts)

Display HTML content rather than just text content

Currently the timeline view only displays text content from a post, not html content. This is because a label is used to display the text. (this could also potentially help fix parts of #89)

There are a couple directions we could go with this.

My first attempt was to try embedding WKWebView in each post view, and pass the Content HTML in as an HTML string, however that seems to take awhile to load and it's ugly and has issues with it being a scroll view, etc. There may be some better approaches while still using that but I think I've decided to sideline that for awhile.

Another approach is to implement #89 to get images out of the html content, and then convert the HTML content into Attributed Text.
Some links to think through:
https://stackoverflow.com/questions/28124119/convert-html-to-plain-text-in-swift
https://medium.com/theappspace/swift-how-to-convert-html-using-nsattributedstring-8c6ffeb7046f

Besides those, I'm thinking the other option is to only show text content on the timeline view and show HTML on the Full Article view when you swipe right to left.

Make posts with weird new lines normalized

Some posts have weird new lines and white space because of the output HTML and not intentionally.

In an Article, likely all new lines need to be treated fine. For regular note posts or specialized posting types like Checkins, there should be some normalization of the content before display, remove extra white space at the beginning of a line and removing extra new lines beyond the standard new lines between two paragraphs.

0a8767a3-642a-46a6-9e22-589aefd4327c

Configure reading speed

Have a set of various article lengths (maybe from their own channels) have the user read through the articles and click a button when they are finished. Track the amount of words and the amount of time it takes to read each article.

Probably do two short microposts, three medium length articles and two longer articles. Figure out how many words per minute they read and then use that when calculating how long a post will take to read.

Create a “feedback” post

This post will be the root post of a thread of replies, all feedback from the Indigenous app.

In settings if the user has a micro.blog Micropub endpoint, clicking “provide feedback” will create a new post that starts with a mention of my micro.blog username

In settings if the user is not a hosted micro.blog user, the post will be in reply to this initial feedback post so that they can send me a webmention.

Think through if there is a way to create priority follows?

In Overcast, you can create Priority Podcasts that when new podcasts from a specific feed come in, they all come in at the top of the feed, before any non-priority ones are listed.

I don't know if this is even possible in Indigenous and/or Microsub. But it seems like an interesting concept. It's kind of like the idea of Facebook's algorithm, except it is controlled by the user. Which is what the IndieWeb is all about.

Investigate a way to turn article snippets into the full thing

First issue is how to detect if it’s a snippet since many articles are just microblog posts.

Second issue is how to fetch and parse the url. If It has a format supported by Xray, I’m fine. But I need a fallback for something that isn’t supported by Xray. Something Instagram like.

First I could fetch the entire page and then I could grab only the html inside an

tag. Then I would need to remove any JavaScript or style tags.

Add a “Twitter” feed to a channel

Use a service like twitter-atom or granary behind the scenes to serve twitter user feeds into a Microsub channel

The goal here is to allow someone to select “Twitter user” and enter a username and to hide the complexity of composing the conversion feed url and then automatically previewing and subscribing to that feed in microsub

Add conversation view to Full Post View

For articles, this should be a fairly simple reader view. For microblog posts I would like this to become more of a “conversation” view.

There are a couple ways I would like to do this. One is if the jf2 has the reply to url unfurled, show those details. If not, use X-ray to try unfurling a reply live when you open the view.

Check if there are any embedded replies/likes in the jf2 (right now, I don’t think any Microsub servers even support this).

Once I cache posts from the channels into CoreData, I should be able to query for any posts that are in any timelines and are replies to this post’s URL. That would allow you to see how different friends throughout your channels are responding to each other in this conversation view of a post.

Currently the best possible option would be potentially using Xray against the current post url, and seeing if there are any replies/likes/etc on the current post’s url. I could pull in that data temporarily on the conversation page load.

The conversation view will take a lot of visual cues from Tweetbot’s conversation/detail view

Instead of loading all the posts since the last loaded post, we should load the latest batch of posts and show a button to load the rest

As described in this issue:

Over here (IndiePass/indiepass-ios#73 (comment)) it was mentioned the idea that a user that hasn't opened a Indigenous in a week might have 500 posts sitting in a channel and that it would be a lot of data to load.

This is actually a very realistic scenario, and one I would like to be able to tackle in Indigenous. My favorite current approach is Tweetbot's "Load Missing Tweets"
tumblr_inline_n9yt8wvi0t1qz4hbm

How this would work is I would have the last posts I fetched when they previously opened the app (with it I would have that batches "before" token). When the channel is opened a week later, I do the standard timeline fetch with no modifiers, getting the current front posts as well as a before and after token.

What I would like to be able to do is to provide the "before" token from the previous group of posts, and the "after" token from the latest group of posts, and get an integer that provides how many posts exist in-between those two tokens. This would enable me to then provide a "load missing posts" button by using either the before token to get older posts or the after token to get newer posts. Eventually, removing the "Load Missing Posts" button when there are no more posts left. (I'm thinking it would technically load 10-20 posts for every click and provide some metric letting them know how many more posts are missing.

More user feedback when clicking the like button

When I click the like button, the app goes ahead and sends a Micropub request to my site. That all works very nice!

Unfortunately, I see nearly no feedback from the button. I liked one post two times this way, and now I visit my homepage every time after I click like, to verify that it worked.

I guess it’s impossible / not right to turn the button red / in an active state (for on the IndieWeb you can like as many times as you want, and the app can’t query the state).

But it can at least jump, show a little spinner, a checkmark, anything to show that it worked. :)

Drag and Drop Individual Entries

drop one or multiple articles into a floating "action bar" that only appears once you start dragging.

Dropping multiple articles into the bar reveals options to star, read later, or share them at once.

Inspiration for this comes from the apps: Bear (text), lire (rss reader)

Allow for the customization of swipe commands

A user should be able to choose what they want swipe commands on the timeline to do.

Currently the options I can think of for swipe commands are:

  • View Full
  • Reply
  • Share
  • Like
  • Bookmark
  • Mark as Read/Unread

Should this be customizable on a per channel basis???? That might be too fine grained. Right now, I’ll focus on customizable on a per account setting.

Author profile pages based on h-cards, etc

It would be nice to create a kind of "Profile" pages where you can see the author's name, url, photo and other info from their h-card by clicking on the avatar (similar to micro.blog or twitter)

Possible Channel View styles

This ticket is a place to think and track ideas for different views of the channels

  • Timeline View (Current View)
  • Photo Timeline (Instagram style?) filter out only things that have photos
  • Photo Gallery (A collection of images looking like a photo gallery)
  • Map View Presents a map with dots where posts are, and presents cards at the bottom that show posts within the frame
  • Card View Kind of like Timeline View but more graphical and looks like the iOS 11 App Store styling
  • Article View (This would be like. Classic feed reader. Compact summary, where you click to view the full thing)

Preset Micropub attributes per channel

You should be able to attach Micropub request attributes to a channel that will always be included by default on any action in that channel.

For example, any responses should have a given category, syndication target, or visibility attached to them.

Add temporary mute filters

Mute filters are a helpful feature to temporarily hide posts containing text content that might spoil a popular show/etc.

Eventually some form of “spoiler alert” might be helpful. But for now, just having a mute filter in a reader helps avoid content you might not want to see yet.

READER: Image Gallery View

The Reader interface should use a collection view instead of a table view. By doing that, we can switch from row view to flow view. The post can than primarily become a photo gallery. When the item is clicked on, it can grow to fill the whole screen

Add support for mp q=config destination

Add support for destination configuration. From a UI perspective, posting to multiple micropub endpoint versus posting to a single micropub endpoint with multiple destinations should be the same.

indieweb/micropub-extensions#3

The one part to think about is defaults. How should I default the destination? Should it be the first destination in the list or the last destination used? I currently allow someone to set a default Micropub Endpoint, but a default Destination is different. Maybe that’s the answer, maybe if they have more than one destination, I need to allow an option to choose a default destination on the micropub endpoint settings page.

(Originally posted at https://eddiehinkle.com/2018/02/20/12/reply/)

Add easy way to enter a link and text

Add a nice menu button for adding link and text, likely a simple view with a "text" and "hyperlink" section. When done is clicked, it adds it within a markdown link

Add follow action in Share Sheet

Add the ability to follow from Share sheet

Someone should be on a page and be able to choose “Follow” from that page.

  • Click “share” while on a page you want to follow
  • Click “Follow” action in sheet
  • Query XRay for available Feeds
  • Display available feeds, User chooses the feed
  • Use Microsub’s Preview function to preview the feed and confirm adding
  • Select what channel to add the subscription to

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.