{"id":23676418,"url":"https://github.com/0xd011f4ce/ourspace","last_synced_at":"2026-03-07T19:31:20.493Z","repository":{"id":269897399,"uuid":"908374714","full_name":"0xd011f4ce/OurSpace","owner":"0xd011f4ce","description":"A MySpace clone made in Laravel that supports ActivityPub","archived":false,"fork":false,"pushed_at":"2025-01-13T02:38:07.000Z","size":869,"stargazers_count":2,"open_issues_count":0,"forks_count":1,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-12-01T08:23:32.038Z","etag":null,"topics":["activitypub","api","laravel","myspace"],"latest_commit_sha":null,"homepage":"https://ourspace.lat","language":"PHP","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/0xd011f4ce.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,"zenodo":null}},"created_at":"2024-12-25T22:52:16.000Z","updated_at":"2025-07-10T21:26:33.000Z","dependencies_parsed_at":"2024-12-27T02:29:54.599Z","dependency_job_id":"b7d7eac4-6b91-43fb-bee2-495775a6cd29","html_url":"https://github.com/0xd011f4ce/OurSpace","commit_stats":null,"previous_names":["0xd011f4ce/ourspace"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/0xd011f4ce/OurSpace","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/0xd011f4ce%2FOurSpace","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/0xd011f4ce%2FOurSpace/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/0xd011f4ce%2FOurSpace/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/0xd011f4ce%2FOurSpace/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/0xd011f4ce","download_url":"https://codeload.github.com/0xd011f4ce/OurSpace/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/0xd011f4ce%2FOurSpace/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":30227785,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-03-07T19:01:10.287Z","status":"ssl_error","status_checked_at":"2026-03-07T18:59:58.103Z","response_time":53,"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":["activitypub","api","laravel","myspace"],"created_at":"2024-12-29T14:53:22.588Z","updated_at":"2026-03-07T19:31:20.417Z","avatar_url":"https://github.com/0xd011f4ce.png","language":"PHP","funding_links":[],"categories":[],"sub_categories":[],"readme":"![Version](https://img.shields.io/badge/version-0.0.1-blue.svg?style=for-the-badge)\n![Status](https://img.shields.io/badge/status-active-green.svg?style=for-the-badge)\n![License](https://img.shields.io/badge/license-GPLv3-lightgrey.svg?style=for-the-badge)\n![ActivityPub](https://img.shields.io/badge/protocol-ActivityPub-orange.svg?style=for-the-badge)\n![Contributors](https://img.shields.io/github/contributors/0xd011f4ce/OurSpace?style=for-the-badge)\n![Forks](https://img.shields.io/github/forks/0xd011f4ce/OurSpace?style=for-the-badge)\n![Stargazers](https://img.shields.io/github/stars/0xd011f4ce/OurSpace?style=for-the-badge)\n![Issues](https://img.shields.io/github/issues/0xd011f4ce/OurSpace?style=for-the-badge)\n\n\u003cbr\u003e\n\n\u003cdiv align=\"center\"\u003e\n  \u003ch3 align=\"center\"\u003eOurSpace\u003c/h3\u003e\n\n  \u003cp align=\"center\"\u003eA decentralised clone of MySpace based in the ActivityPub protocol.\u003c/p\u003e\n\u003c/div\u003e\n\n\u003cdetails\u003e\n  \u003csummary\u003eTable of Contents\u003c/summary\u003e\n\n  \u003col\u003e\n    \u003cli\u003e\n      \u003ca href=\"#about-the-project\"\u003eAbout The Project\u003c/a\u003e\n      \u003cul\u003e\n        \u003cli\u003e\u003ca href=\"#built-with\"\u003eBuilt With\u003c/a\u003e\u003c/li\u003e\n      \u003c/ul\u003e\n    \u003c/li\u003e\n    \u003cli\u003e\n      \u003ca href=\"#getting-started\"\u003eGetting Started\u003c/a\u003e\n      \u003cul\u003e\n        \u003cli\u003e\u003ca href=\"#prerequisites\"\u003ePrerequisites\u003c/a\u003e\u003c/li\u003e\n        \u003cli\u003e\u003ca href=\"#installation\"\u003eInstallation\u003c/a\u003e\u003c/li\u003e\n      \u003c/ul\u003e\n    \u003c/li\u003e\n    \u003cli\u003e\n      \u003ca href=\"#todo\"\u003eTODO\u003c/a\u003e\n    \u003c/li\u003e\n  \u003c/ol\u003e\n\u003c/details\u003e\n\n## About The Project\n\n![](img/OurSpaceHome.png)\n\n**OurSpace** is a decentralised social networking platform inspired by the early concepts of MySpace but built using the ActivityPub protocol for enhanced privacy and interoperability. The goal of OurSpace is to provide users with a space to express themselves, share content, and connect with others in a federated environment that prioritises user privacy and data ownership.\n\n### Built With\n\n- ![Laravel](https://img.shields.io/badge/Laravel-v11-FF2D20?style=for-the-badge\u0026logo=laravel\u0026logoColor=white)\n- ![PHP](https://img.shields.io/badge/PHP-v8-777BB4?style=for-the-badge\u0026logo=php\u0026logoColor=white)\n- ![Redis](https://img.shields.io/badge/redis-%23DD0031.svg?style=for-the-badge\u0026logo=redis\u0026logoColor=white)\n\n## Getting Started\n\nOurSpace is meant to be easy to set up and run on your own server. Below are the steps to get started with OurSpace.\n\n### Prerequisites\n\nTo use OurSpace we need to have installed PHP 8.2 or later and Redis. We can install them in a Debian-based system with the following commands:\n\n```bash\nsudo apt update\nsudo apt install nginx mysql-server php php-fpm php-mbstring php-xml php-bcmath php-curl php-redis redis nginx zip unzip composer nodejs npm\n```\n\nNow, enable nginx, mysql and php-fom services:\n\n```bash\nsudo systemctl enable --now nginx mysql php-fpm redis-server\n```\n\nCreate a database for OurSpace:\n\n```bash\nmysql\nCREATE DATABASE ourspace;\nCREATE USER 'ourspace_user'@'localhost' IDENTIFIED BY 'password';\nGRANT ALL ON ourspace.* TO 'ourspace_user'@'localhost';\nFLUSH PRIVILEGES;\nEXIT;\n```\n\n### Installation\n\nOnce you have all the required software installed and the database created, you can proceed to install OurSpace. First, clone the repository:\n\n```bash\ncd /var/www/html\ngit clone https://github.com/0xd011f4ce/OurSpace\n```\n\nNow, edit the `.env` file with your database, redis, and mail credentials. You can copy the `.env.example` file to `.env` and edit it with your favourite text editor.\n\nInstall all the dependencies:\n\n```bash\ncomposer install\nnpm install\n```\n\nNow, create the key and run the migrations:\n\n```bash\nphp artisan key:generate\nphp artisan migrate\n```\n\nBuild the styles:\n\n```bash\nnpm run build\n```\n\nGive the proper permissions:\n\n```bash\nchown -R www-data:www-data /var/www/html/OurSpace\nchmod -R 755 /var/www/html/OurSpace\n```\n\nNow, create a virtual host for OurSpace. You can create a file in `/etc/nginx/sites-available/ourspace.conf` with the following content:\n\n```nginx\nserver {\n    listen 80;\n    server_name ourspace.lat;\n    root /var/www/html/OurSpace/public;\n\n    add_header X-Frame-Options \"SAMEORIGIN\";\n    add_header X-XSS-Protection \"1; mode=block\";\n    add_header X-Content-Type-Options \"nosniff\";\n\n    index index.html index.htm index.php;\n\n    charset utf-8;\n\n    location / {\n        try_files $uri $uri/ /index.php?$query_string;\n    }\n\n    location = /favicon.ico { access_log off; log_not_found off; }\n    location = /robots.txt  { access_log off; log_not_found off; }\n\n    error_page 404 /index.php;\n\n    location ~ \\.php$ {\n        fastcgi_pass unix:/var/run/php/php8.1-fpm.sock;\n        fastcgi_index index.php;\n        fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;\n        include fastcgi_params;\n    }\n\n    location ~ /\\.(?!well-known).* {\n        deny all;\n    }\n}\n```\n\nAnd we need another one for serving Laravel Reverb. We can create it in `/etc/nginx/sites-available/ws.conf` with the following content:\n\n```nginx\nserver {\n    listen 80;\n    server_name ws.ourspace.lat;\n    root /var/www/html/ourspace/public;\n\n    location /app {\n    \tproxy_http_version 1.1;\n        proxy_set_header Host $http_host;\n        proxy_set_header Scheme $scheme;\n        proxy_set_header SERVER_PORT $server_port;\n        proxy_set_header REMOTE_ADDR $remote_addr;\n        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;\n        proxy_set_header Upgrade $http_upgrade;\n        proxy_set_header Connection \"Upgrade\";\n        proxy_read_timeout 300s;\n        proxy_connect_timeout 75s;\n\n\n        proxy_pass http://127.0.0.1:8080;\n    }\n}\n```\n\nEnable the config:\n\n```bash\nsudo ln -s /etc/nginx/sites-available/ourspace.conf /etc/nginx/sites-enabled/\nsudo ln -s /etc/nginx/sites-available/ws.conf /etc/nginx/sites-enabled/\n```\n\nRestart nginx:\n\n```bash\nsudo systemctl restart nginx\n```\n\nNow link the storage to the public folder, install the dependencies for reverb and seed the database:\n\n```bash\nphp artisan storage:link\nphp artisan install:broadcasting\nphp artisan db:seed\n```\n\nNow, we need to create three services to handle the jobs that OurSpace needs to run, another to handle the notifications' queue and another one to run Laravel Reverb. So run something `emacs /lib/systemd/system/ourspace-queue.service`, `emacs /lib/systemd/system/ourspace-notifications.service`, `emacs /lib/systemd/system/ourspace-ws.service` and add the following content:\n\n```ini\n# /lib/systemd/system/ourspace-queue.service\n[Unit]\nDescription=OurSpace queue worker\n\n[Service]\nUser=www-data\nGroup=www-data\nRestart=on-failure\nExecStart=/usr/bin/php /var/www/html/ourspace/artisan queue:work --daemon --env=production --queue=ap\n\n[Install]\nWantedBy=multi-user.target\n```\n\n```ini\n# /lib/systemd/system/ourspace-notifications.service\n[Unit]\nDescription=OurSpace notifications worker\n\n[Service]\nUser=www-data\nGroup=www-data\nRestart=on-failure\nExecStart=/usr/bin/php /var/www/html/ourspace/artisan queue:work --daemon --env=production\n\n[Install]\nWantedBy=multi-user.target\n```\n\n```ini\n# /lib/systemd/system/ourspace-ws.service\n[Unit]\nDescription=OurSpace WebSockets\tService\n\n[Service]\nUser=www-data\nGroup=www-data\nRestart=on-failure\nExecStart=/usr/bin/php /var/www/html/ourspace/artisan reverb:start\n\n[Install]\nWantedBy=multi-user.target\n```\n\nNow reload the systemd daemon:\n\n```bash\nsudo systemctl daemon-reload\n```\n\nFinally, enable and start both services, and your OurSpace instance will be ready to be used!\n\nAditionally, if you want to start multiple instances of the queue workers (which is ideal) you can name the service like `/lib/systemd/system/ourspace-queue@.service` and you can enable and manage them like this:\n\n```bash\nsudo systemctl enable ourspace-queue\\{1..6} # enables 6 services\nsudo systemctl start ourspace-queue\\{1..6} # starts 6 services\n```\n\n## TODO:\n\nFor a list of planned features and improvements, please refer to the [TODO](TODO.md) file.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2F0xd011f4ce%2Fourspace","html_url":"https://awesome.ecosyste.ms/projects/github.com%2F0xd011f4ce%2Fourspace","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2F0xd011f4ce%2Fourspace/lists"}