Giter Club home page Giter Club logo

liveactionmap's Issues

Add CI/CD and Tests

As the project grows, we need a way to make sure it is easy to test incoming PRs instead of me manually pulling and testing everything. The best way would be to setup a CI/CD pipeline using Github Actions. At the present moment we don't have any tests except the one introduced in #21. Ideally I would like to setup tests and then a CI/CD pipeline. However, the server running the website right now, is manually using cron jobs. I would instead like to wait for #16 to finish and then create a pipeline with the docker image.

Meanwhile, feel free to add tests and help me write a CI pipeline.

Domain name

I was trying to get a domain on freenom, but it doesn't let me register, for the time being I'll deploy it on my custom domain but if anyone has a spare domain lying around or if they can register a free "liveactionmap" domain on freenom that would be great.

Self-host a Nominatim Service

Self-hosting a Nominatim service will help us cut down on time wasted doing API calls.
Map building takes the most time. And right now, most of the time while building the map is spent on doing 2 API calls to a public Nominatim service per tweet, which adds a lot of latency.

Since we already have a docker build, it doesn't hurt to add one or two more containers to our deployment.

Links to refer:
https://github.com/mediagis/nominatim-docker
https://nominatim.org/release-docs/latest/admin/Installation/

This will help us shift to a dynamic backend in the long run.

Cache Nominatim geocoding API

As getting the latitude and longitude of the found location seems to be the most time-consuming operation, it would probably make sense to cache the responses of the Nominatim API.

Analitics

It would be neat to see how many hits the site gets.

I'd recommend either google or unami(this is more gdpr complaint and can be self hosted on Heroku for free)

IP Blocking - Russia?

Should we block Russia from using the applet?

This might be actually helpful in order not to leak possible troop information,

Remove temporary tweets file after every x minutes.

Since we're no longer dependent on the cronjob, we need to remove the tweets in the python code itself. However deleting the file after each run as done in an earlier PR is not useful because there's too few data points, we can try to increase the number of results we get from Twitter but that's a separate issue.

Also let's make sure the schedule time for the scraping and removing tweets don't overlap (they are not multiples) otherwise the tweets file might be deleted while the bot is running outputting an empty map.

Add time to popup

I think it would be good to add the time of the tweet in the popup,

API: Markers

Create a GET API serving /api/markers providing a response containing all currently available markers.

Expected response

{
    "markers": [
        {
            "position": [
                49.038230248475905,
                31.450182690663947
            ],
            "title": "Twit Title with image",
            "content": "",
            "user": "Twitter User",
            "uri": "https://twitter/postUrl",
            "image": "imageURL",
            "timestamp": "unixtimestamp of tweet"
        },
        {
            "position": [
                48.038230248475905,
                31.450182690663947
            ],
            "title": "Twit Title without image",
            "content": "Twit Text",
            "user": "Twitter User",
            "uri": "https://twitter/postUrl",
            "timestamp": "unixtimestamp of tweet"
        }
    ],
    "timestamp": "unixTimeStamp"
}

Add a .onion link

This is so people can access the site using tor, might make some people feel safer.

This would need a separate frontend that doesn't contain any tracking and no links to anything but out service

Persistently store scraped tweets

As discussed in #16, the current storage of scraped tweets is not optimal, because the newly scraped tweets will just be appended to the existing tweets.txt-file, creating a lot of duplicates.
Integrating a database is probably not necessary at this point, we could store the scraped tweets with their ID in a json-file and only add new ones in the run of the application.

Add blacklist

Add a blacklist for Twitter accounts spreading misinformation.

Implement a ui

I think it would be a pretty good idea to implement a ui for this instead of just generating a PNG.

If needed i could spare some time in Vue. By all means i have a free weekend right now.

Dynamic Fronted

How about I make a quick mockup with vuejs that would just read an api. That way once the project is evolved enough it would be enough to just hook one and the other together.

Originally posted by @Krishna-Sivakumar in #24 (comment)

Add SEO

Add some SEO tags to make the map easier to find online

API: Zones

Create a GET API serving /api/zonesproviding a response containing all currently available markers.

Expected response

[
    {
        "positions": [
            [
                50.36429316995319,
                30.228621662109
            ],
            [
                50.51303377189189,
                30.28741424805162
            ],
            [
                50.60122461757218,
                30.787151228563896
            ],
            [
                50.44548234821721,
                30.77081995469095
            ]
        ],
        "color": "green",
        "title": "Safe Zone",
        "content": "Some safe zone over here"
    }
]

Community: Discord server

It might be useful to aid development, implement an uptime monitor notification, and general future requests.

Show safe locations

Show the location of places like subway stations where people can hide in case of a conflict.

Dockerize for Scalability

I don't really know a lot about python but should dockerize the app for easier future scalability.

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.