left-on-read / leftonread Goto Github PK
View Code? Open in Web Editor NEWLeft on Read
Home Page: https://leftonread.me/
License: Other
Left on Read
Home Page: https://leftonread.me/
License: Other
As discussed in #53, let's turn on no-explicit-any
and no-default-export
in app. We should try to make the rules as consistent as possible with the top-level .eslintrc
so when we actually do a migration, we won't end up with a ton of errors.
We need to populate the stack of texts with real data and additionally add profile pictures.
As title suggests, we should set up workflows for web similar to app.
https://github.com/react-ga/react-ga
If possible, let's also set up our goal as users clicking the "Notify me" CTA when they sign up their email.
There's no loading or error indicators on the Notify Me CTA
Note: it's unfortunate, but there's no known easy way to do ONLY_GROUP_CHATS (where expected behavior is sent and received between people only in group chats). It's only "Both" or "Only Individual Convos". We need to dig deeper but I (Alex) think this is because of message.cache_names IS NOT NULL gives you all group chats in which you never sent a message. is_from_me = 1 AND message.cache_names IS NOT NULL
does not exist.
Every query should be able to filter on date. We do not currently keep track of date.
This is part of the user flow. We need to figure out how to prompt the user for full disk access. We need full disk access because we copy the chat.db
file from ~/Library/Messages
and move it to ~/.leftonread
.
In the long-term, we'll allow an option for the user to plop their chat.db on their Desktop. See: #21
The work for this issue should also update the docs (if anything changed for local development.)
If there is a .vcf file on the user's computer, it should parse the contacts and join them to the core tables.
I think a Github logo prompting users to start would look nice at bottom of footer.
Options:
I vote option 2, but it won't have typescript support I think. There might be other packages.
Goal: anyone who commits to this project should have their files auto-prettified no matter their editor.
Impact: Without this, we will get contributions from people who do not have prettified code and that is annoying and makes the code less readable and the pr diffs confusing.
We used to do a workflow, but @Teddarific didn't like it because then you have to pull the remote changes.
Splitting this issue from #24
Will need to update the query, the types, and the chart.
Stacked bar chart could be done via an optional prop:
https://stackoverflow.com/questions/37249439/chartjs-v2-0-stacked-bar-chart
PROS:
CONS:
PROS:
CONS:
As a developer,
I want the code to be pretty
So that it is standardized
Acceptance Criteria:
At the moment, we don't nearly have enough navbar links to make a navbar worth it IMO. Let's just delete it, so that its only the Logo in the top left.
Creating the "Top Emoji Table" should take ~10 minutes now that everything is setup
Will wait to does this until #15 done to see how that changes the overall architecture/types layout.
Went with https://github.com/Julien-Marcou/Unicode-Emoji in PR #187
Currently, we read the emojis from a hard-coded list in a .js
file. But emojis can be found in/System/Library/Input Methods/CharacterPalette.app/Contents/Resources/CharacterDB.sqlite3
. Instead of a hard-coded list we could read from this CharacterDB.sqlite3
file. However, it seems that Apple does not keep that db in sync with the latest emoji updates delivered in new iOSes. (An emoji from iOS 14 does not yet appear in the db stored on my machine.)
Ideally, we would get all emojis through an API. But we also want this app to work without an Internet connection.
Going with option 2 by continuing to hard code. But leaving this issue up for future discussion.
Doesn't have to be its own page... but maybe that's best.
I was thinking that we should make it clear that this is the same Left on Read from reddit, from Dartmouth, and the same Left on Read that previously made you upload your chat.db on the Internet.
Thoughts? @Teddarific
Unreal in 2021 we still have this issue. ๐
Website has a few bugs on Safari:
Production URL: https://leftonread.me/
Kind of blocked by design, but we should set up the main framework of the user flow. We can copy over the old copy / flow from the original site for now.
It's going to important to know what the technical limitations are in terms of accessing a chat.db and .vcf
This will help address what the user flow will look like:
I typed out the below, but I realized this is a Nextjs app with server side rendering, so we almost 100% will go with Vercel.
What done looks like for this issue:
Two options I see right now to deploy web:
1. firebase ๐ฅ
pros:
cons:
2. vercel for git ๐ฆ
pros:
RESOURCES:
Add the logic to filter on the TopFriends query just like the WordOrEmoji query.
We only need to create the SPLIT_TEXT_TABLE
once and then never again. This should be a "Core" table that is created on initialize. This will greatly improve performance because then the WordCount and EmojiCount (and I imagine a word by day chart) tables can just read from this core table, which is created only once.
The core table could also already exclude stopWords, unicode characters, etc, so we don't have to run those WHERE clauses multiple times.
PROS:
CONS:
@Teddarific thoughts? @ayc19 and I have been discussing this and Alex wants your thoughts
Not a high priority.
It'd be nice to flatten the app
directory so that the electron
folder is basically the top level (but we can keep it named app
). Is this possible?
RE: the .vscode
folder, I don't much about this stuff, but if we want to keep it would be nice to hoist to top level (don't know implications of applying electron
settings to other projects), or just remove it if it's not that useful.
Create a top friends chart.
Initial PR:
#23
Is your feature request related to a problem? Please describe.
When I don't get a match on my contact name (because I don't have it on my computer), I'd like to add it manually.
Describe the solution you'd like
Text input box to map phone numbers to contacts?
Additional context
Implementation-wise, I think this means we would have to write to the db (update the contact_name) field for that phone number.
Implement filtering - we can start with just a single filter, such as by date.
This should be redux-driven.
As title suggests, we should set up workflows for server similar to app.
We need some way to JOIN between the addressbook.db tables and the chat.db tables (so that we can get the contact name, which is only stored in the addressbook.db).
We currently JOIN on phone number, as I don't know of any other shared field.
Unfortunately, the addressbook.db and chat.db store the phone number in different formats.
As a result, we need to 'normalize' the two. We do this by stripping the country code if the phone_number is longer than 10 digits and ONLY matching when the phone numbers are both 10 digits.
This is bad because then contact names will not work for users outside the U.S. and Canada (the only countries where phone numbers are 10 digits).
Current implementation: normalization.ts
THEN SUBSTR(
replace(
${column}, "${COUNTRY_CODE_SYMBOL}", ""
),
-${PHONE_NUMBER_LENGTH},
${PHONE_NUMBER_LENGTH}
See #9
As a user,
I want the ability to put in my own stop words,
So that I have a better sense of what 'meaningful' words I send
EDIT: This was closed because we won't do this. We'll just allow user to paginate through
We need to replace all the icons in here: https://github.com/Left-on-Read/app/tree/main/electron/resources (aka the resources
folder with our icon. This is what appears in production.
Assigning to @Teddarific
We use electron logger, which is great, but we should still standardize logging across the entire app, i.e., every log should be formatted the same way.
We have a baseline eslint and prettier config for the monorepo now.
app
will still probably need it's own eslint config to apply specific erb
rules it looks like, but we should work towards making the rules consistent with that in server & web. For example, let's work towards turning on no-explicit-any
and prefer-default-export
etc
Prettier should be more straight forward. There'll be a big change of changing tabWidth from 4 to 2
We'll have a link to Contact Us in the Footer. I'm open to how we implement this. A few options off the top of my head:
In the mobile browser (at least on iPhone8 both Safari and Chrome mobile):
Currently in the "Unique analytics" section we only have the "Top Received Words" chart.
Let's add in a "Top Emojis" chart. We should add it so it's a carousel with left / right arrows to scroll through each different chart. You'll also probably have to add another hard-coded data field to the Texts. Don't worry too much about the actual content since I plan on going through and handling that near the end.
Didn't see this anywhere in the code. Is React Router still your preferred way of implementing this in this way @Teddarific ?
I want to search by a Friend aka Contact aka phone number.
@Teddarific could we get issues... or if it's easier, just comment here what still needs to be done with the marketing site, i.e., web/
and server/
By the time #24 and #15 are done, any developer should be able to easily add a chart within a few minutes (if they know the query). (Many of the queries are already roughly outlined here: https://gist.github.com/alexdanilowicz/56c7124d7b55ce76a3706bd5d96add01)
We should document how to do this. As a first pass, we can create a CONTRIBUTING.md (maybe make it live on the wiki?). It should outline how to add a chart, which will help document the overall architecture.
We should strip punctuation from texts.
PROS:
CONS:
Look at how https://github.com/Left-on-Read/leftonread/blob/main/app/src/chatBro/constants/punctuation.ts is currently done and make it more robust and clean.
See #124 as an example.
I believe the open-source standard is for contributors without push access to make forked repos. But if that's not the case, perhaps we could simplify this by giving everyone push access?
Otherwise, we should get workflows running on forked copies as well.
Lets use workflows instead.
Feel free to re-assign to @ayc19
A declarative, efficient, and flexible JavaScript library for building user interfaces.
๐ Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. ๐๐๐
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google โค๏ธ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.