{"id":19764832,"url":"https://github.com/pablonicolla/nuntius","last_synced_at":"2026-04-04T21:31:23.322Z","repository":{"id":247011662,"uuid":"823908126","full_name":"PabloNicolla/NUNTIUS","owner":"PabloNicolla","description":"A local-first mobile messaging app. The goal is to not store messages in the server.","archived":false,"fork":false,"pushed_at":"2024-11-18T22:34:40.000Z","size":5912,"stargazers_count":1,"open_issues_count":2,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2026-01-03T12:26:06.785Z","etag":null,"topics":["django","docker","expo","python","react-native","terraform","typescript"],"latest_commit_sha":null,"homepage":"","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/PabloNicolla.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2024-07-04T01:42:23.000Z","updated_at":"2024-11-18T22:34:44.000Z","dependencies_parsed_at":"2024-07-06T05:11:40.736Z","dependency_job_id":"77e1f272-a286-4a5f-a798-0aa2bcdb31b8","html_url":"https://github.com/PabloNicolla/NUNTIUS","commit_stats":null,"previous_names":["pablonicolla/mobile-django-expo"],"tags_count":2,"template":false,"template_full_name":null,"purl":"pkg:github/PabloNicolla/NUNTIUS","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/PabloNicolla%2FNUNTIUS","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/PabloNicolla%2FNUNTIUS/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/PabloNicolla%2FNUNTIUS/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/PabloNicolla%2FNUNTIUS/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/PabloNicolla","download_url":"https://codeload.github.com/PabloNicolla/NUNTIUS/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/PabloNicolla%2FNUNTIUS/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31415110,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-04T20:09:54.854Z","status":"ssl_error","status_checked_at":"2026-04-04T20:09:44.350Z","response_time":60,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["django","docker","expo","python","react-native","terraform","typescript"],"created_at":"2024-11-12T04:15:28.559Z","updated_at":"2026-04-04T21:31:23.293Z","avatar_url":"https://github.com/PabloNicolla.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# NUNTIUS\n\nA local-first mobile messaging app. The goal is to not store messages in the server.\n\n## Table of Contents\n- [Tech Stack](#tech-stack)\n- [Project Configuration (Run locally or Cloud deployment)](#project-configuration-run-locally-or-cloud-deployment)\n  - [Backend](#backend)\n    - [Allow Social Login (Optional)](#allow-social-login-optional)\n    - [Allow Images, Audio, Videos, and Files Upload (Optional)](#allow-images-audio-videos-and-files-upload-optional)\n    - [Alternative Backend (Run Django on Host Machine)](#alternative-backend-run-django-on-host-machine)\n  - [IAAS](#iaas)\n  - [Frontend](#frontend)\n- [Features](#features)\n  - [Send/Receive Message Flow](#sendreceive-message-flow)\n- [API Reference](#api-reference)\n- [Authors](#authors)\n\n## Tech Stack\n\n**Client:** React Native, EXPO, SQLite3\n\n**Server:** Python 3.12, Django, Redis, Postgres, Daphne\n\n**IAAS:** Azure, AWS, (Terraform)\n\n## Project Configuration (Run locally or Cloud deployment)\n\n### Backend\n\n[docker-compose.yaml](docker-compose.yaml) file already contains all the default variables for development set up.\n\nyou can modify as needed, for example if you already have containers or services running on the ports that are going to be used.\n\n```\ndocker compose up --build\n```\n\n---\n\n#### Allow social login (OPTIONAL)\n\n\u003e [!IMPORTANT]\n\u003e If you want to use Google Authentication, you will need to access django admin and create a new Social application.\n\nfirst shutdown docker compose.\n\n```\ndocker compose down\n```\n\nModify [docker-compose.yaml](docker-compose.yaml) adding a new port forwarding between web (django) container and your host machine.\n\nFor example:\n\n```yaml\n    ports:\n      - \"8000:8000\"\n      - \"8899:8899\" # try one that is available both on the container and on host: \u003chost\u003e:\u003ccontainer\u003e\n```\n\nrun docker compose again.\n\n```\ndocker compose up --build\n```\n\n```sh\n# access django container\ndocker-compose exec web bash # web is the django container name\n\n# create superuser\npython manage.py createsuperuser\n\n# run django with runserver using the correct port\npython manage.py runserver 0.0.0.0:8899\n```\n\nOn host machine access `http://localhost:8899/admin` and add Social applications\n\nafter that you can close the runserver, run compose down, and rebuild again without the additional port forwarding\n\n\u003e [!NOTE]\n\u003e For more experienced users, the above may be achieved using `manage.py shell` and creating the object\n\n---\n\n#### Allow images, audio, videos and files upload (OPTIONAL)\n\nTo support these features you will need to follow the `#Support for file upload` at [Terraform](terraform/README.md) Readme file\n\n---\n\n#### Alternative Backend (Run Django on host machine)\n\n\u003e [!NOTE]\n\u003e This steps only apply if you don't want to run Django on a container\n\n- run only Postgres and Redis containers.\n- open [Backend](backend/README.md) and follow steps\n\n---\n\n### IAAS\n\nDeploy backend infrastructure using Azure \u0026 AWS with Terraform script.\n\nFollow instructions at [Terraform](terraform/README.md)\n\n---\n\n### Frontend\n\nOpen [Frontend](frontend/nuntius/README.md) instructions for building the Expo app.\n\n## Features\n\n### Send/Receive text message flow\n\n```mermaid\nsequenceDiagram\n    title Send/Receive message\n\n    participant SenderDB as SenderDB\n    participant Sender as Sender\n    participant Django as Django\n    participant DjangoDB as DjangoDB\n    participant DjangoRedis as DjangoRedis\n    participant Receiver as Receiver\n    participant ReceiverDB as ReceiverDB\n\n    Sender-\u003e\u003eDjango: wss(msg)\n    Django-\u003e\u003eSender: status(msg_sent)\n    Sender-\u003e\u003eSenderDB: update(msg_status)\n    Django-\u003e\u003eDjangoDB: store(msg)\n    Django-\u003e\u003eDjangoRedis: findMsgReceiver(msg.receiverId)\n    DjangoRedis--\u003e\u003eDjango: return channel_obj\n    \n    alt No channel_obj\n        note right of Django: The message will be sent when the receiver is online\n    else channel_obj exists\n        Django-\u003e\u003eReceiver: sendMessage(msg)\n        Receiver-\u003e\u003eReceiverDB: store(msg)\n        Receiver--\u003e\u003eDjango: return confirmationId\n        \n        alt No confirmationId\n            note right of Django: Wait for receiver to confirm message receipt\n        else confirmationId exists\n            Django-\u003e\u003eSender: status(msg_received)\n            Sender-\u003e\u003eSenderDB: update(msg_status)\n            Django-\u003e\u003eDjangoDB: delete(msg.id)\n        end\n    end\n```\n\n## API Reference\n\nTODO\n\n## Authors\n\n- [@pablonicolla](https://github.com/PabloNicolla)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpablonicolla%2Fnuntius","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fpablonicolla%2Fnuntius","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpablonicolla%2Fnuntius/lists"}