Git Product home page Git Product logo

elixirstatus-web's Introduction

ElixirStatus Inline docs Deps Status ElixirWeekly

I already integrated Phoenix in my project Inch CI, but have not yet build a frontend site with it. I want to do this here.

This will become http://elixirstatus.com, my first complete Phoenix project.

What will this be?

It will be a small site for developers to post their creations: new projects, blog posts and version updates.

No link-sharing in a wider sense, just posting your own stuff.

Screenshot

So it won't be a large site, but it will make up for it by being well-integrated into existing services and trends, like GitHub, Twitter, and RSS.

It will make it easy to follow new projects and blogs in the Elixir community.

Don't we have this already?

Yes and no. I always have the feeling my project and update announcements get drowned by so much else that is out there (be it on the mailing list or on #myelixirstatus). And you can't get mentioned in Elixir Radar every week 😁

The important thing here is this is inspired by the original RubyFlow. Giving developers a venue where they can be heard whether they are a Phoenix contributor or an unknown coder who wrote his first blog post about recursion. Equal voice for everyone.

Open Roadmap #21

  • Build and launch landing page
  • Add postings
  • GitHub integration
  • Twitter setup
  • Design functional UI
  • Beta phase (described here)
  • Fun!

Usage

To start the ElixirStatus application:

  1. Install mix dependencies with:

    $ mix deps.get
  2. Install Node.js dependencies, for the asset pipeline, with:

    $ npm install
  3. Make sure you have MySQL installed and then configure the database accordingly in config/dev.exs and config/test.exs.

  4. Create and migrate the database with:

    $ mix ecto.create
    $ mix ecto.migrate
  5. Seed database with:

    $ mix run priv/repo/seeds/seed.exs
  6. Register a GitHub application for local testing:

    Application name: <your choice>

    Homepage-URL: http://localhost:4000

    Application description: <your choice>

    Authorization callback URL: http://localhost:4000/auth/callback

  7. Start Phoenix endpoint with

    CLIENT_ID=<your_github_app_client_id> CLIENT_SECRET=<your_github_app_client_secret> mix phoenix.server

Now you can visit localhost:4000 from your browser.

Contribution

I am no designer (as Inch CI probably shows) and still relatively new to Elixir myself. So if you want to be part if this little exercise and help out, just ping me on Twitter or send me an email.

Author

RenΓ© FΓΆhring (@rrrene)

But ElixirStatus is a community project and received fantastic contributions from these community members:

  • Hans Pagh (@Hanspagh)
  • Phil Nash (@philnash)
  • Riza Fahmi (@rizafahmi)
  • Peter Suschlik (@splattael)

Credits

ElixirStatus takes inspiration from RubyFlow, which helped me a lot to get my Ruby projects noticed.

People posting a wild mix of interesting stuff, discoveries and banter under the hashtag #myelixirstatus on Twitter inspired the name.

License

ElixirStatus is released under the MIT License. See the LICENSE file for further details.

elixirstatus-web's People

Contributors

fazibear avatar hanspagh avatar henrik avatar knewter avatar philnash avatar pragtob avatar rizafahmi avatar rrrene avatar simonprev avatar skade avatar splattael 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

elixirstatus-web's Issues

Suggestion: TODO issues

Hey there! I'd probably lend a hand when I have time, but it would be helpful if you added issues in the tracker for features/things you feel are in progress/need to be done, and tag them as help-wanted or not, that way people can come in, post a comment saying they are tackling it and/or ask for more direction. Might want to have an RFC tag and post issues under it that represent the things you think are optional and/or need some discussion. You have the TODO list in the README, but it doesn't really identify what's currently in-development, etc.

Just a friendly suggestion from a potential contributor ;)

Unauthenticated Twitter handle is not safe

hello! i'm filing this here as we use it for rust-lang. (https://herald.community.rs)

the twitter handle is a string, so anything can be put there. this could be used to suggest that someone is the author of a post that they didn't author, which is a way to harass someone. (e.g. write an inappropriate post, or just any post, or number of posts to ping that person on twitter.)

i would recommend that the twitter handle be added via a authentication step only, so that only people with access to an account can have that account mentioned via the automated tweeting process.

for example, i authed with my GitHub account but put my partner's twitter handle:
https://twitter.com/RustHerald/status/885590557082439680

since GitHub accounts are free, having to authenticate with GitHub doesn't significantly reduce the harassment vector here :/

Feature: Fixtures

We need some Seeds/Fixtures for testing both via mix test and by hand, since nobody wants to repost half a dozen fake announcements everytime he tests features like "delete".

We could probably put the fixtures into an *.exs file in priv/repo/fixtures, but from there on I am also lost. Very open for ideas here.

Feature: Create a little control panel to test some cases "live"

I want to code a little "control panel" that appears in the web interface in dev mode, which links corner cases from the test suite, like e.g.

"Should render 404 if trying to show a posting that does not exist"
"Should do X when trying to update a posting that does not belong to you"

I am not yet sure how to accomplish this, but I think it might be a good addition to having the edge cases covered by mix test.

Let's have a discussion about this!

Feature: Compose post before being logged in

Maybe, just maybe, it would be nice if we could display the posting form and let the user type his/her posting, before he/she has to authenticate via GitHub.

I am unsure whether this a great feature we really need (because it lowers the barrier to participate) and how we would store the "draft" of the posting during authentification.

I am open for ideas here!

Feature: Parallel execution of Publisher.after-hooks

When thinking about it, we should execute the stuff Publisher.after_create/1 and Publisher.after_update/1 do in a parallel fashion, as this does not have to finish before the Phoenix server can send a response.

But it has to ensure execution, so a simple spawn fn -> ... won't do the trick.

Emojis get eaten (and the following text

What did I do?

I wrote an entry with emojis in title and body.

What happened?

The emojis as well as the following text were removed after publish/save.

What did I expect to happen?

The title and the text should include the emojis and no further harm to my text is done.

Example

Ref: http://elixirstatus.com/p/gCHr

Title entered: TL;DR: πŸ—œπŸ³πŸ“¦ β€” Strip feature in #EDIB (Elixir Docker Image Builder) makes images even smaller!
Title after save: TL;DR:

(If you have an edit log, it should be visible; I adjusted the title afterwards, so it makes sense again.)

Fun Fact

The tweet is correct.

System

I use Chrome 50 on OSX 10.11.4.

Redirect www to apex domain

I accidentally visited www.elixirstatus.com today instead of elixirstatus.com, only to be met by this:

image

It should instead redirect to the apex domain.

Slack-friendly (RSS) feed?

Currently when setting up a simple RSS feed integration in a Slack channel, this is how it looks like for each entry:
screenshot 2016-10-24 um 15 47 00

This is most likely due to the HTML used in the RSS template and Slack not being able to display it in a user-friendly way.

Question would be:
Can we have a simplified feed (e.g. text only description, or even just the titles only) as an alternative to the current HTML version? WDYT?

Wrong title in post

Created this tweet to warn about CFT for Fosdem 2020 BEAM Devroom being almost over (2 days away), but somehow used a (cached) wrong title! Can you please edit the tweet with the (now fixed) title? Thanks.

Get rid off compile time warnings (also for executing tests)

Right now there are quite a lot, especially when running mix test (here I did mix clean before)

Compiled lib/elixir_status/meta.ex
Compiled lib/elixir_status/plugs/remove_reponse_headers_for_embedded.ex
Compiled lib/elixir_status.ex
Compiled lib/elixir_status/auth.ex
Compiled lib/elixir_status/url.ex
Compiled lib/elixir_status/uid.ex
Compiled test/support/conn_login_helper.ex
Compiled test/support/channel_case.ex
Compiled test/support/conn_case.ex
Compiled test/support/model_case.ex
web/controllers/locale.ex:4: warning: variable opts is unused
Compiled web/controllers/locale.ex
Compiled web/oauth/git_hub_auth.ex
Compiled web/models/avatar.ex
Compiled web/views/impression_view.ex
Compiled web/views/short_link_view.ex
Compiled web/views/error_helpers.ex
Compiled web/web.ex
Compiled lib/elixir_status/repo.ex
Compiled web/gettext.ex
Compiled lib/elixir_status/link_shortener.ex
Compiled web/models/short_link.ex
Compiled web/models/impression.ex
web/posting_typifier.ex:77: warning: variable string is unused
Compiled web/posting_url_finder.ex
Compiled lib/elixir_status/impressionist.ex
Compiled web/models/user.ex
Compiled web/models/posting.ex
Compiled web/views/view_helper.ex
web/posting_typifier.ex:29: warning: variable tail is unused
web/posting_typifier.ex:32: warning: variable sum_all is unused
web/posting_typifier.ex:32: warning: variable tail is unused
web/posting_typifier.ex:35: warning: variable points is unused
web/posting_typifier.ex:35: warning: variable type is unused
Compiled web/posting_typifier.ex
Compiled lib/elixir_status/publisher.ex
web/controllers/admin/impression_controller.ex:38: warning: multiple clauses with default values should define a function head with the defaults, defp get_all/1 has multiple clauses and defines defaults in a clause with a body
Compiled lib/elixir_status/plugs/logged_in.ex
Compiled lib/elixir_status/plugs/admin.ex
Compiled lib/elixir_status/plugs/same_user_or_admin.ex
Compiled web/controllers/admin/user_controller.ex
Compiled web/controllers/feed_controller.ex
web/controllers/admin/impression_controller.ex:15: warning: default arguments in get_all/1 are never used
Compiled web/controllers/impression_controller.ex
Compiled web/controllers/github_auth_controller.ex
web/controllers/admin/impression_controller.ex:38: warning: variable params is unused
Compiled web/controllers/admin/overview_controller.ex
Compiled web/controllers/admin/posting_controller.ex
Compiled web/controllers/admin/impression_controller.ex
Compiled web/controllers/page_controller.ex
Compiled web/controllers/short_link_controller.ex
Compiled web/views/changeset_view.ex
Compiled web/views/admin/overview_view.ex
Compiled web/controllers/user_controller.ex
Compiled web/views/admin/user_view.ex
Compiled web/views/admin/impression_view.ex
Compiled web/views/error_view.ex
Compiled web/views/admin/posting_view.ex
Compiled web/views/feed_view.ex
Compiled web/views/page_view.ex
Compiled web/views/layout_view.ex
Compiled web/views/shared_view.ex
Compiled web/views/user_view.ex
Compiled web/router.ex
Compiled web/controllers/posting_controller.ex
Compiled lib/elixir_status/endpoint.ex
Compiled web/views/posting_view.ex
Generated elixir_status app
test/controllers/page_controller_test.exs:12: warning: you are piping into a function call without parentheses, which may be ambiguous. Please wrap the function you are piping into in parentheses. For example:

    foo 1 |> bar 2 |> baz 3

Should be written as:

    foo(1) |> bar(2) |> baz(3)

test/controllers/page_controller_test.exs:19: warning: you are piping into a function call without parentheses, which may be ambiguous. Please wrap the function you are piping into in parentheses. For example:

    foo 1 |> bar 2 |> baz 3

Should be written as:

    foo(1) |> bar(2) |> baz(3)

test/controllers/posting_controller_test.exs:32: warning: you are piping into a function call without parentheses, which may be ambiguous. Please wrap the function you are piping into in parentheses. For example:

    foo 1 |> bar 2 |> baz 3

Should be written as:

    foo(1) |> bar(2) |> baz(3)

test/controllers/posting_controller_test.exs:41: warning: you are piping into a function call without parentheses, which may be ambiguous. Please wrap the function you are piping into in parentheses. For example:

    foo 1 |> bar 2 |> baz 3

Should be written as:

    foo(1) |> bar(2) |> baz(3)

test/controllers/posting_controller_test.exs:50: warning: you are piping into a function call without parentheses, which may be ambiguous. Please wrap the function you are piping into in parentheses. For example:

    foo 1 |> bar 2 |> baz 3

Should be written as:

    foo(1) |> bar(2) |> baz(3)

test/controllers/posting_controller_test.exs:59: warning: you are piping into a function call without parentheses, which may be ambiguous. Please wrap the function you are piping into in parentheses. For example:

    foo 1 |> bar 2 |> baz 3

Should be written as:

    foo(1) |> bar(2) |> baz(3)

test/controllers/posting_controller_test.exs:73: warning: you are piping into a function call without parentheses, which may be ambiguous. Please wrap the function you are piping into in parentheses. For example:

    foo 1 |> bar 2 |> baz 3

Should be written as:

    foo(1) |> bar(2) |> baz(3)

test/controllers/posting_controller_test.exs:82: warning: you are piping into a function call without parentheses, which may be ambiguous. Please wrap the function you are piping into in parentheses. For example:

    foo 1 |> bar 2 |> baz 3

Should be written as:

    foo(1) |> bar(2) |> baz(3)

test/controllers/posting_controller_test.exs:123: warning: you are piping into a function call without parentheses, which may be ambiguous. Please wrap the function you are piping into in parentheses. For example:

    foo 1 |> bar 2 |> baz 3

Should be written as:

    foo(1) |> bar(2) |> baz(3)

test/controllers/posting_controller_test.exs:132: warning: you are piping into a function call without parentheses, which may be ambiguous. Please wrap the function you are piping into in parentheses. For example:

    foo 1 |> bar 2 |> baz 3

Should be written as:

    foo(1) |> bar(2) |> baz(3)

test/controllers/posting_controller_test.exs:144: warning: you are piping into a function call without parentheses, which may be ambiguous. Please wrap the function you are piping into in parentheses. For example:

    foo 1 |> bar 2 |> baz 3

Should be written as:

    foo(1) |> bar(2) |> baz(3)

test/controllers/posting_controller_test.exs:157: warning: you are piping into a function call without parentheses, which may be ambiguous. Please wrap the function you are piping into in parentheses. For example:

    foo 1 |> bar 2 |> baz 3

Should be written as:

    foo(1) |> bar(2) |> baz(3)

test/controllers/posting_controller_test.exs:170: warning: you are piping into a function call without parentheses, which may be ambiguous. Please wrap the function you are piping into in parentheses. For example:

    foo 1 |> bar 2 |> baz 3

Should be written as:

    foo(1) |> bar(2) |> baz(3)

test/controllers/posting_controller_test.exs:181: warning: you are piping into a function call without parentheses, which may be ambiguous. Please wrap the function you are piping into in parentheses. For example:

    foo 1 |> bar 2 |> baz 3

Should be written as:

    foo(1) |> bar(2) |> baz(3)

test/controllers/posting_controller_test.exs:193: warning: you are piping into a function call without parentheses, which may be ambiguous. Please wrap the function you are piping into in parentheses. For example:

    foo 1 |> bar 2 |> baz 3

Should be written as:

    foo(1) |> bar(2) |> baz(3)

test/controllers/posting_controller_test.exs:205: warning: you are piping into a function call without parentheses, which may be ambiguous. Please wrap the function you are piping into in parentheses. For example:

    foo 1 |> bar 2 |> baz 3

Should be written as:

    foo(1) |> bar(2) |> baz(3)

test/controllers/posting_controller_test.exs:219: warning: you are piping into a function call without parentheses, which may be ambiguous. Please wrap the function you are piping into in parentheses. For example:

    foo 1 |> bar 2 |> baz 3

Should be written as:

    foo(1) |> bar(2) |> baz(3)

test/controllers/posting_controller_test.exs:257: warning: you are piping into a function call without parentheses, which may be ambiguous. Please wrap the function you are piping into in parentheses. For example:

    foo 1 |> bar 2 |> baz 3

Should be written as:

    foo(1) |> bar(2) |> baz(3)

test/controllers/posting_controller_test.exs:264: warning: you are piping into a function call without parentheses, which may be ambiguous. Please wrap the function you are piping into in parentheses. For example:

    foo 1 |> bar 2 |> baz 3

Should be written as:

    foo(1) |> bar(2) |> baz(3)

test/controllers/posting_controller_test.exs:304: warning: you are piping into a function call without parentheses, which may be ambiguous. Please wrap the function you are piping into in parentheses. For example:

    foo 1 |> bar 2 |> baz 3

Should be written as:

    foo(1) |> bar(2) |> baz(3)

test/controllers/posting_controller_test.exs:313: warning: you are piping into a function call without parentheses, which may be ambiguous. Please wrap the function you are piping into in parentheses. For example:

    foo 1 |> bar 2 |> baz 3

Should be written as:

    foo(1) |> bar(2) |> baz(3)

test/controllers/posting_controller_test.exs:323: warning: you are piping into a function call without parentheses, which may be ambiguous. Please wrap the function you are piping into in parentheses. For example:

    foo 1 |> bar 2 |> baz 3

Should be written as:

    foo(1) |> bar(2) |> baz(3)

test/elixir_status/publisher_test.exs:59: warning: this clause cannot match because a previous clause at line 51 always matches
........................

Getting 500 internal server error when posting

Following is the post I was trying to do

I wrote a blog post on how one can use Apache ECharts in Elixir Livebook. It also gives a general idea of how to use any JS library in Livebook
https://dev.to/parthex/using-echarts-in-elixir-livebook-3540

Run project on CI

Running this on a CI such as travis would be nice so no accidental make their way into the code base. Setup is rather easy, although I gotta revisit it for phoenix (elixir is a breeze though) :)

edit: I just noticed someone apparently once thought the same, but there's no .travis.yml there yet so it tries to run it as ruby

Implement screen design from README

I have the HTML for the screen laying around in a vanilla Phoenix app.

Now I just have to migrate the HTML and CSS to the actual ElixirStatus project 😲

Wrong Twitter handle is associated with my account

My profile has the right GitHub username (sdball) but the wrong Twitter handle. It's stuck on my old Twitter username (stephenballnc) and not getting my new Twitter username (MutableBall) which is current in my GitHub profile.

Feature: RSS controller and feed

We already have postings and a PostingController, but we also need an RSS feed that displays the last X Postings.

We could probably introduce a separate controller for the RSS feed and extract the "load postings for the start page" logic from PostingController to always have the same postings in the feed that are on the frontpage.

(Mix) Could not compile dependency :ssl_verify_fun

Running on Ubuntu 16.04.3 LTS

`iex -S mix
Erlang/OTP 20 [erts-9.0] [source] [64-bit] [smp:4:4] [ds:4:4:10] [async-threads:10] [hipe] [kernel-poll:false]

===> Compiling mimerl
===> Compiling metrics
===> Compiling unicode_util_compat
===> Compiling idna
warning: String.strip/1 is deprecated, use String.trim/1
/home/mpc/projects/elixir/adder/deps/poison/mix.exs:4

==> poison
Compiling 4 files (.ex)
warning: Integer.to_char_list/2 is deprecated, use Integer.to_charlist/2
lib/poison/encoder.ex:173

Generated poison app
===> Compiling ssl_verify_fun
===> Compiling src/ssl_verify_pk.erl failed
src/ssl_verify_pk.erl:16: can't find include lib "public_key/include/public_key.hrl"

src/ssl_verify_pk.erl:52: record 'OTPCertificate' undefined
src/ssl_verify_pk.erl:53: record 'OTPTBSCertificate' undefined
src/ssl_verify_pk.erl:54: record 'OTPSubjectPublicKeyInfo' undefined

==> adder
** (Mix) Could not compile dependency :ssl_verify_fun, "/home/mpc/.mix/rebar3 bare compile --paths "/home/mpc/projects/elixir/adder/_build/dev/lib/*/ebin"" command failed. You can recompile this dependency with "mix deps.compile ssl_verify_fun", update it with "mix deps.update ssl_verify_fun" or clean it with "mix deps.clean ssl_verify_fun"`

Apply some form of spam detection?

Seeing as how there have been a few instances of spam lately popping up on the feed, might it be worth looking into some form of spam detection using something like a Naive Bayes filter or doc2vec for descriptions and/or target link content? There should be enough good training data for either approach by now I would think.

Also along the lines of #53 it seems like some kind of manual "report" button would go hand-in-hand with an automated flagging approach.

If there's an interest, I'd be more than happy to look into it! I would think nx should make short work of something like this, or even leveraging some existing NLP package like penelope.

Switch fork dependencies (timex, timex_ecto, extwitter) over to official packages

Hi there,

thanks for this project and all the other projects you do in Elixir land :)

I'd suggest switching extwitter & friends over to the official package again. It gave me this nice warning when installing: warning: the dependency :extwitter requires Elixir "~> 1.0.0" but you are running on v1.2.5 - it's also ~140 commits behind their master.

I see you have commits on the fork, if they are still needed we should work on getting those in there and then switching it over. If for some reason your changes are not accepted over there, then I'd suggest putting them into an alone standing package so that they can work with the main package (or even just put the code into this project if that's the only place they are used).

Happy to help you with this endeavour :)

Unable to login and post

Elixir status doesn't allow me to log in and post. I am getting an internal server error. I last had access on 12/29/2020

Is there an issue with rss avatar image url?

Hi,

I was checking out the rss feed and noticed avatar links aren't loading.

Screen Shot 2019-03-29 at 4 29 27 PM

Looking at the code it could be an issue with Impressionist?

Just guessing since avatars seem to load fine in other contexts!

Proof-Read: About ElixirStatus

Since I am no native speaker, I would feel better if somebody who is could proof-read this:

ElixirStatus is a site built by the community to create _an outlet where we can post stuff we created_.

It is not so much a link sharing platform where you post stuff you find, but more of a creator-hub where _you can post when you have something new to announce_, like

  • a project,
  • blog post,
  • version update,
  • episode of their podcast or
  • if they are organizing a meetup/conference.

_Your annoucement will then appear_ on this website, in RSS, on Twitter and /r/elixir.

The idea is to have something akin to what RubyFlow is for Ruby, but bringing the Elixir community's ideas to the table.

Last but not least, ElixirStatus is a web app written in _Elixir+Phoenix running in production._

Together with sites like Elixir Jobs, it is _intended to serve as a case study_ for the community, so _you can point your boss to these sites_ if he or she wants to see "proof" that this "Elixir thing" is actually a viable alternative to Ruby/Python/Node when building the next web project.

@philnash are you an "english native" and could you have a look at this?

P.S. The bold-italic parts will be highlighted the same way things are highlighted in my blog.

Feature: Pagination for postings

I think we could realize this via Scrivener.

ElixirStatus.PostingController.get_all/0 already builds up a query to load the frontpage postings. This seems like the right place to implement pagination.

Any takers?

[ANN] Roadmap to Launch

Hi folks,

I am super excited about the progress so far! Since I will be on a business trip for 10 days, I wanted to give you an update how I think we should proceed:

Monday, 13th July

I leave and won't be able to get any programming done. Contributions welcome!

Tuesday, 21st July

I return, let's get some programming done. Also: merging your PRs :)

Thursday, 23rd July

We have a "private" beta here (first deployment of the codebase, "private" in the sense that you have to sign in via GitHub to test the site, but everybody can join in on this!).

The purpose of this is bug hunting, finding usability issues, testing RSS and Twitter integrations, finding typos/grammatical errors etc.

Last week of July

"Open Beta" for elixirstatus.com - the site does no longer require login to read, but we still have some kind of banner saying "Please test-drive this and try to break things. Report an issue if you do :)"

First week of August

Launch of elixirstatus.com.

If everything works out, this just means the removal of the "Open Beta"-banner 😁


It would be super great if we could tackle these two issues while I'm on the road:

  • #20 Integrate Timex' Ecto adapter
  • #2 Implement RSS-Feed

For the already made contributions I want to cite the great @josevalim: ❀️ πŸ’š πŸ’™ πŸ’› πŸ’œ


Any feedback on the timeline, the issues and the project in general is greatly appreciated!

Yours
RenΓ©

/cc @bitwalker @danielberkompas @Hanspagh @philnash @rizafahmi

GitHub authentication doesn't work anymore

When I tried to authorize myself via GitHub to submit a post, I was initially successfully redirected to the corresponding page at GitHub to authorize the app. When redirected back, however, I ended up with an "Internal Server Error (500)". After a page reload, this error message then appears:

Failed to authenticate: %Ueberauth.Failure{errors: [%Ueberauth.Failure.Error{message: "The code passed is incorrect or expired.", message_key: "bad_verification_code"}], provider: :github, strategy: Ueberauth.Strategy.Github}

Blacklist against spam

In the last few days, there were some spam posts on elixirstatus. Someone on Twitter suggested to ban all posts by a certain domain (all spam posts linked to articles on that domain).

Example spam post from a few mins ago:

Want To Hire Best Web And App, Developers? Hire MEAN Stack Developers
Misc Today by  jimmiewilliams |  Retweet this
In the evolving world of full stack development, MEAN stack development is the first option that comes in the mind of startups and enterprises of US, UK, Europe, Australia, Canada and many other leading countries. hiring MEAN Stack Development Company India is a trending choice for the web & mobile app development today. So, are you aware of the nitty-gritty of MEAN stack? Keep reading the blog and at the end, you will be completely aware of all the aspects of MEAN stack Development Solutions.

Check out this Blog: https://excellentwebworld.com/hire-mean-stack-developers/

I think it would make sense to introduce a blacklist feature so spammers are more limited in the future.

favicon missing?

I leave ElixirStatus in a pinned tab in Safari. The most recent deploy is no longer serving a favicon for Safari to use for the tab.

deploy by expm module, raise Scrivener is not available

use exrm

exrm

      {:exrm, "~> 0.19.2"}

Elixir version 1.0.5

mix phoenix.server is ok,

but rel/elixir_status/bin/elixir_status console will raise undefined function: Scrivener.paginate/4 exception

22:51:54 lds@where elixirstatus-web slug ? rel/elixir_status/bin/elixir_status console
Using /Users/lds/github/elixirstatus-web/rel/elixir_status/releases/0.0.1/elixir_status.sh
Exec: /Users/lds/github/elixirstatus-web/rel/elixir_status/erts-6.2.1/bin/erlexec -boot /Users/lds/github/elixirstatus-web/rel/elixir_status/releases/0.0.1/elixir_status -boot_var ERTS_LIB_DIR /Users/lds/github/elixirstatus-web/rel/elixir_status/erts-6.2.1/../lib -env ERL_LIBS /Users/lds/github/elixirstatus-web/rel/elixir_status/lib -config /Users/lds/github/elixirstatus-web/rel/elixir_status/running-config/sys.config -pa /Users/lds/github/elixirstatus-web/rel/elixir_status/lib/consolidated -args_file /Users/lds/github/elixirstatus-web/rel/elixir_status/running-config/vm.args -user Elixir.IEx.CLI -extra --no-halt +iex -- console
Root: /Users/lds/github/elixirstatus-web/rel/elixir_status
/Users/lds/github/elixirstatus-web/rel/elixir_status
Erlang/OTP 17 [erts-6.2.1] [source] [64-bit] [smp:4:4] [async-threads:10] [hipe] [kernel-poll:false] [dtrace]

22:53:22.332 [info] Running ElixirStatus.Endpoint with Cowboy on http://sdutlinux.org:4000
Interactive Elixir (1.0.5) - press Ctrl+C to exit (type h() ENTER for help)
iex([email protected])> 22:53:29.909 [info] GET /
22:53:29.991 [info] Sent 500 in 79ms
22:53:30.023 [error] #PID<0.257.0> running ElixirStatus.Endpoint terminated
Server: localhost:4000 (http)
Request: GET /
** (exit) an exception was raised:
    ** (UndefinedFunctionError) undefined function: Scrivener.paginate/4 (module Scrivener is not available)
        Scrivener.paginate(ElixirStatus.Repo, [page_size: 20], #Ecto.Query<from p in ElixirStatus.Posting, where: p.public == ^true, order_by: [desc: p.published_at], preload: [:user]>, %{"format" => "html"})
        (elixir_status) web/controllers/posting_controller.ex:20: ElixirStatus.PostingController.index/2
        (elixir_status) web/controllers/posting_controller.ex:1: ElixirStatus.PostingController.phoenix_controller_pipeline/2
        (elixir_status) lib/phoenix/router.ex:281: ElixirStatus.Router.dispatch/2
        (elixir_status) web/router.ex:1: ElixirStatus.Router.do_call/2
        (elixir_status) lib/elixir_status/endpoint.ex:1: ElixirStatus.Endpoint.phoenix_endpoint_pipeline/1
        (elixir_status) lib/phoenix/endpoint/render_errors.ex:34: ElixirStatus.Endpoint.call/2
        (phoenix) lib/phoenix/endpoint/cowboy_handler.ex:80: Phoenix.Endpoint.CowboyHandler.upgrade/4

Community Ideas

I'd like to collect the ideas from various discussions here to have a central place of discussion for what's on the table.

  • Hide big submit form behind button (thx @nithinbekal)
  • Make it clear that the title is tweeted after publication (thx @joekain)
  • Make it clear that user names refer to GitHub accounts (thx @dbeck)
  • Add an optional field for the author's Twitter handle (thx @slogsdon)

Let's hear how we can improve further! πŸ‘

Posting links to articles could be more intuitive

I've seen articles being posted where the author forgets to add the link to the original post (and it has happened to me in the past as well). I think it's a bit tricky to get it right the first time, maybe the interface could have a specific input for an article source, if one is provided?

Here's an example:
image

I think the main problem is that the intuitive way of adding a link is to just post the url, instead of using the markdown syntax [pedroassuncao.com](https://pedroassuncao.com/posts/531), and lots of people do the former, ending in an article without a link.

Maybe a warning could be sent when publishing if you post something that is less than X characters in length and does not contain a link, or something like that? Or some explicit explanation of how to add a link? Or a button to add a link that takes care of all of that?

Feature: Autosave post during typing

We should probably autosave the new posting during typing, so that in case of some reload/disconnect/battery death the user can continue working on his/her post.

I have not yet researched current possibilities with HTML5 Webstorage and other gimmicks, so without knowing any other widely adoptable solution, I would implement this through one JSON cookie, for which we would have to add js-cookie to js/vendor.

Compiling src/ssl_verify_hostname.erl failed

ubuntu 14.04 LTS

lds@localhost:~/elixirstatus-web$ mix ecto.create
==> ssl_verify_hostname (compile)
Compiling src/ssl_verify_hostname.erl failed:
src/ssl_verify_hostname.erl:8: can't find include lib "public_key/include/public_key.hrl"
src/ssl_verify_hostname.erl:109: undefined macro 'id-ce-subjectAltName'
src/ssl_verify_hostname.erl:86: record 'AttributeTypeAndValue' undefined
src/ssl_verify_hostname.erl:88: variable 'CN' is unbound
src/ssl_verify_hostname.erl:101: variable 'ExtId' is unbound
src/ssl_verify_hostname.erl:101: record 'Extension' undefined
src/ssl_verify_hostname.erl:249: record 'OTPTBSCertificate' undefined
src/ssl_verify_hostname.erl:262: record 'OTPCertificate' undefined
src/ssl_verify_hostname.erl:264: function extract_dns_names/1 undefined
src/ssl_verify_hostname.erl:94: Warning: function extensions_list/1 is unused
src/ssl_verify_hostname.erl:100: Warning: function select_extension/2 is unused
src/ssl_verify_hostname.erl:117: Warning: function extract_dns_names_from_alt_names/2 is unused
ERROR: compile failed while processing /home/lds/elixirstatus-web/deps/ssl_verify_hostname: rebar_abort
** (Mix) Could not compile dependency ssl_verify_hostname, /home/lds/.mix/rebar command failed. If you want to recompile this dependency, please run: mix deps.compile ssl_verify_hostname

Support Other Authentication Approaches

Currently, ElixirStatus uses a direct OAuth2 authentication approach to GitHub to sign in. I'm curious how open you are to adding IndieAuth as another authentication method. Some people might not use GitHub and this'll lower the barrier to access. A few things would be required:

  • Fetching user information would require more logic (only name, photo and a URI seem to be needed)
  • Twitter profile info can be inferred from one's personal site using rel=me.

I have a library that can do most of the heavy lifting. I'm also down to providing the patches as well. Just want to gauge interest / openness to the idea.

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.