Giter Club home page Giter Club logo

elk's Introduction

Elk logo

Elk alpha

A nimble Mastodon web client


discord chat Start new PR in StackBlitz Codeflow Open board on Volta


Elk screenshots

⚠️ Elk is in Alpha

It is already quite usable, but it isn't ready for wide adoption yet. We recommend you use it if you would like to help us build it. We appreciate your feedback and contributions. Check out the Open Issues and jump in the action. Join the Elk discord server to chat with us and learn more about the project.

Deployment

Official Deployment

The Elk team maintains a deployment at:

Self-Host Docker Deployment

In order to host Elk yourself you can use the provided Dockerfile to build a container with elk. Be aware, that Elk only loads properly if the connection is done via SSL/TLS. The Docker container itself does not provide any SSL/TLS handling. You'll have to add this bit yourself. One could put Elk behind popular reverse proxies with SSL Handling like Traefik, NGINX etc.

  1. checkout source git clone https://github.com/elk-zone/elk.git
  2. got into new source dir: cd elk
  3. build Docker image: docker build .
  4. create local storage directory for settings: mkdir elk-storage
  5. adjust permissions of storage dir: sudo chown 911:911 ./elk-storage
  6. start container: docker-compose up -d

Note

The provided Dockerfile creates a container which will eventually run Elk as non-root user and create a persistent named Docker volume upon first start (if that volume does not yet exist). This volume is always created with root permission. Failing to change the permissions of /elk/data inside this volume to UID:GID 911 (as specified for Elk in the Dockerfile) will prevent Elk from storing it's config for user accounts. You either have to fix the permission in the created named volume, or mount a directory with the correct permission to /elk/data into the container.

Ecosystem

These are known deployments using Elk as an alternative Web client for Mastodon servers or as a base for other projects in the fediverse:

Note: Community deployments are NOT maintained by the Elk team. It may not be synced with Elk's source code. Please do your own research about the host servers before using them.

💖 Sponsors

We are grateful for the generous sponsorship and help of:

NuxtLabs

StackBlitz

And all the companies and individuals sponsoring Elk Team and the members. If you're enjoying the app, consider sponsoring us:

Or you can sponsor our core team members individually:

We would also appreciate sponsoring other contributors to the Elk project. If someone helps you solve an issue or implement a feature you wanted, supporting them would help make this project and OS more sustainable.

📍 Roadmap

Open board on Volta

🧑‍💻 Contributing

We're really excited that you're interested in contributing to Elk! Before submitting your contribution, please read through the following guide.

Online

You can use StackBlitz Codeflow to fix bugs or implement features. You'll also see a Codeflow button on PRs to review them without a local setup. Once the elk repo has been cloned in Codeflow, the dev server will start automatically and print the URL to open the App. You should receive a prompt in the bottom-right suggesting to open it in the Editor or in another Tab. To learn more, check out the Codeflow docs.

Open in Codeflow

Local Setup

Clone the repository and run on the root folder:

pnpm i
pnpm run dev

Warning: you will need corepack enabled, check out the Elk Contributing Guide for a detailed guide on how to set up the project locally.

We recommend installing ni, that will use the right package manager in each of your projects. If ni is installed, you can instead run:

ni
nr dev

Testing

Elk uses Vitest. You can run the test suite with:

nr test

📲 PWA

You can consult the PWA documentation to learn more about the PWA capabilities on Elk, how to install Elk PWA in your desktop or mobile device and some hints about PWA stuff on Elk.

🦄 Stack

  • Vite - Next Generation Frontend Tooling
  • Nuxt - The Intuitive Web Framework
  • Vue - The Progressive JavaScript Framework
  • VueUse - Collection of Vue Composition Utilities
  • Pinia - The Vue Store that you will enjoy using
  • Vue Macros - More macros and syntax sugar for Vue
  • UnoCSS - The instant on-demand atomic CSS engine
  • Iconify - Iconify icon sets in JSON format
  • Masto.js - Mastodon API client in TypeScript
  • shiki - A beautiful yet powerful syntax highlighter
  • vite-plugin-pwa - Prompt for update, Web Push Notifications and Web Share Target API

👨‍💻 Contributors

📄 License

MIT © 2022-PRESENT Elk contributors

elk's People

Contributors

alexzhang1030 avatar antfu avatar ayoayco avatar boehs avatar cyberalien avatar danielroe avatar demivan avatar edimitchel avatar emanuelpina avatar iamdtms avatar johnythecarrot avatar katullo11 avatar lazzzis avatar littlesound avatar mastoduy avatar maybeanerd avatar mini-ghost avatar mrcego avatar patak-dev avatar renovate[bot] avatar shinigami92 avatar shuuji3 avatar sma11x avatar sxzz avatar userquin avatar webfansplz avatar wheatjs avatar xabirequejo avatar zaidhaan avatar zyyv avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

elk's Issues

Make dark mode toggle more obvious | Use preferred dark mode

I literally searched the dark mode toggle everywhere at first.
In my profile settings by clicking on my profile below the compose button or in the lower right corner.

It took me around 10 seconds to find it in the right lower corner.


I'm also not sure but does it use already preferred color schema by default? It was light mode for me by default.

Open up MVP

  • DB for storing app tokens
  • Auto register app for servers
  • Users switcher, logout
  • Dialog of warning on the first visit
  • "Open in main server" mean for each toot

Nice to have

  • Editor
    • Image upload
    • Video upload
    • Code snippets
    • Rich text?
    • Emoji picker: #500
  • Preference page
  • Override emojis: #129
  • i18n setup

Add a preview before posting

As elk supports markdown and other thing, we should provide a preview before sending the post out to the world

Provide a tooltip of why publish is disabled

When hovering over the publish button, we should show a tooltip to describe what you need to do to be possible to press publish

image

yes, I know this is just to make it really stupid safe
but as there is no hover effect or disable cursor icon, it feels like the UI is buggy

Support basic markdown when rendering a post

I think we could at least support *italic*, **bold**, and inline code.

Maybe we should have a toggle button to see the raw post, as an escape hatch. And also make sure that when we select and copy the text, the original raw post is copied.

Fullscreen preview for images

When clicking on an image in a post, it should be enlarged and shown in a fullscreen preview

On mobile mas.to has also the issue/bug to scroll the content behind the preview instead of e.g. support pinch zoom for touch input 😕 / or swipe to show prev-next image if there are multiple

Drag N' Drop media to compose container

As a user, I will like to be able to drag media from my file directory into the compose container to attach it to my post. Similar behavior to birdy-app

I'm thinking about using vueuse useDropZone wdyt?

keyboard shortcuts

like default mastodon ui + twitter, we can implement shortcuts, e.g. g - n goes to notifications, g - h to home, etc.

add PWA stuff

PWA tasks list:

  • #101
  • #340
  • include tests for service worker and push notifications
  • include notification settings panel
  • add support to send messages when offline

Account page shows non-rendered emoji in title

When being in an account page, emojis will not get rendered and fallback to their text representation

This bug is also in mastodon 😕

image

I think it's not possible to show (at least custom) emojis in title because we cannot render images

So maybe trim out /:.+:/ from the account displayName when showing in title

Add hover indicator for post elements

mas.to shows an underline below some clickable content like account name and post-time

We should copy this behavior
IMO it serves a better UX

Peek.2022-11-24.21-38.mp4

image alt text improvements

it should be possible to:

  • set image alt text when uploading images
  • view image alt text by clicking on the image or in a button in an overlay
  • edit image alt text when editing a post

ui issues

Here some ui issues (I'll add new ones when found):

  • #51
  • login dialog not using focus trap
  • mobile nav button missing, cannot navigate (not logged/public)
  • mobile nav button missing, cannot navigate (logged)
  • change message header layout: on mobile breaks the layout

Feel free o create issue from previous list and assign it yourself.

Improve contrast in dark mode for publish button

image

image

In dark mode the publish text is hard to read for both cases: disabled or enabled

I would suggest lower the orange tone a bit and increase grey the text color a bit for disabled

Edit: when hovering over the publish button, it feels like it gets the correct color that should be applied by default

image

Plugin System

Support third-party plugins for more features and possibilities.

  • NPM package
  • plugins can inject their UI into some places.

Do not allow to fav/boost own posts

One thing that annoys me already on mastodon is that you can fav/boost your own posts 🤔
IMO this doesn't make sense

We could disable these in the first step, but also even could think further to hide these posts (by default) as these should go into the notifications tab (this should be more thinked through)

image

Add pull-to-refresh

Web apps installed on iOS have problems resuming, which can result in an app trapped in a seemingly stable but actually unusable/behind experience. Adding pull-to-refresh (maybe two staged, one to update timeline, one to reload app) can help resolve this problem

Support search

Currently the search feature is completely missing

I wanted to search for some tags to follow them, and suddenly found out that the search functionality is not supported yet

feat: Support polls in posts

When creating a post we should be able to add polls to the post. I'll be happy to take up this task. We can probably use a UI similar to Twitter's. The only difference seems to be that Mastodon allows you to toggle between single and multi poll responses.

Emojis should only animate if cursor is near

On mas.to animated emojis only play when you are near to the context
Like when you hover over the post or over your profile

Right now it is really distracting with many playing emojis on one viewport

Peek.2022-11-24.21-06.mp4

Improve accessibility

  • zen-hide sidebar should be an aside instead of a div
    • "A mastodon client made with <3" and "las build" should be in p tags instead of divs
    • Username should be a header or a p instead of a div
    • Profile image should be wrapped in the same tag as the username stuff, and should be a button because it's not pointing to a separate URL but rather toggles a flyout menu (it's should semantically be the same as a "hamburger" flyout toggle). In fact, the button should probably be lifted up to the div that contains the button styling
      • Speaking of the account flyout menu, that should capture tab focus, include a "close" button, and should close when a user hits esc
    • The light grey used throughout the dark theme isn't accessible for the sizes it's used at (it looks like white with .35 opacity applied; I'd generally recommend against applying opacity to text because it gets hard to use DevTools to determine color contrast)`
  • The glass effect that holds small-screen nav and headers (at least in dark mode) doesn't allow for enough color contrast when over light colors (especially white). I'd generally recommend (as a quick test, because these are mostly white and black, and the orange is close to white in lightness) determining color contrast by throwing a white background behind the effect and doing a contrast ratio test against the resultant rendered background color
  • The account sidebar and nav shouldn't require a user to hover to see the ability to enable/view. Instead, a persistent button to show/hide these items should be made available.

Sign-in form is not accessible

Two big things I noticed on the sign in form:

  • It's not a form, so pressing Return/Enter doesn't cause the login to initiate.
  • It doesn't capture focus within the dialog, or follow some other dialog guidelines.

I'm happy to take this one on, just reporting it here.

Screen.Recording.2022-11-24.at.10.33.16.AM.mov

Jump back to top

When clicking on the elk logo in the right upper corner while you are on the timeline and have scrolled a bit down, jump back to top (and see if there are new posts)

mas.to and bird-site is doing this already

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.