Coolol is a fully customizable twitter client based on JavaScript ES6 without any backend. It communicates with Twitter server directly. So you don't have to sign up or give your token to me. Everything stays and only stays in your browser.
Open Coolol.Me and you are ready to go.
Notice: I only test in latest Google Chrome. May or may not support other browser in the future. But contribution is welcomed.
- Multi-column board view.
- Multi accounts.
- Multi-source for one channel.
- Customizable JavaScript based filter rules at both board/channel levels.
- Web-based allows accessing from everywhere, and no backend.
- Open-source and free to hack.
It allows you to write a config like:
{
"filters": [
"isBetweenUser('ranmocy', 'BillGates')"
],
"channels": [
{
"name": "Home",
"sources": [
["statuses_homeTimeline", {}]
],
"filters": [
"tweetContainsAny('SomeDirtyWord', 'SomeUninterestingKeyword', 'OrSomeBoringEventName')"
]
},
{
"name": "Mentions",
"sources": [
["statuses_mentionsTimeline", {}]
]
},
{
"name": "Direct Messages",
"sources": [
["directMessages", {}],
["directMessages_sent", {}]
]
},
{
"name": "Mix sources",
"sources": [
["statuses_homeTimeline", {}],
["statuses_userTimeline", { "screen_name": "ranmocy" }],
["statuses_userTimeline", { "screen_name": "BillGates" }]
],
"filters": [
"sender.screen_name == 'BillGates' && receiver.screen_name == 'ranmocy'"
]
},
{
"name": "My tweets",
"sources": [
["statuses_userTimeline", { "user_id": "me" }]
]
}
]
}
Name of sources come from Codebird convention based on Twitter API
Rule of filters are pure JavaScript expression returns a boolean. If the expression returns true, the corresponding tweet will be removed from the channel.
Pre-defined variables:
tweet
: The tweet object to determine, fetched from Twitter server.sender
: The user object of the tweet sender/creator. Typical fields to be used:sender.id_str
,sender.screen_name
.receiver
: The user object of the tweet receiver. Used in replying tweet, or direct message. Would be empty object{}
in other cases.
Pre-defined functions:
isBetweenUser(user1, user2)
: returns true if the tweet is a conversation betweenuser1
anduser2
.tweetContains(keyword)
: returns true if the tweet body contains the given keyword.tweetContainsAny(keyword1, keyword2, ...)
: returns true if the tweet body contains any given keyword.
git clone https://github.com/ranmocy/Coolol.git
cd Coolol
python -m SimpleHTTPServer 8080
- Open browser with url:
http://localhost:8080
- Support Direct-Message composition
- Re-auth when token invalid
- Auto refresh
- Prepends tweet when publish new tweet.