{"id":20099038,"url":"https://github.com/jream/php-saas-jream","last_synced_at":"2026-04-12T06:33:34.130Z","repository":{"id":78658776,"uuid":"68972672","full_name":"JREAM/php-saas-jream","owner":"JREAM","description":"Previous JREAM.com SaaS/LMS with Video Streaming built with: AWS S3/CF/RMTP/RDB, Phalcon PHP, Stripe/PayPal API, Screen Recorded w/Yeti Mic,NodeJS, Python Fabric and Ruby Mailcatcher..","archived":false,"fork":false,"pushed_at":"2024-08-02T08:12:03.000Z","size":36656,"stargazers_count":1,"open_issues_count":1,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-03-02T16:48:45.770Z","etag":null,"topics":["apache","bash","codeception","fabric","lms","mailcatcher","node","paypal-rest-api","phalcon","php","python","webpack"],"latest_commit_sha":null,"homepage":"https://jream.com","language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/JREAM.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"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":"2016-09-23T00:13:57.000Z","updated_at":"2024-08-02T08:12:06.000Z","dependencies_parsed_at":"2024-08-02T09:37:09.355Z","dependency_job_id":"5aea5c5e-90a9-439b-ac9c-dc06fc4b18a0","html_url":"https://github.com/JREAM/php-saas-jream","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/JREAM/php-saas-jream","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/JREAM%2Fphp-saas-jream","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/JREAM%2Fphp-saas-jream/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/JREAM%2Fphp-saas-jream/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/JREAM%2Fphp-saas-jream/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/JREAM","download_url":"https://codeload.github.com/JREAM/php-saas-jream/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/JREAM%2Fphp-saas-jream/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31706764,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-12T06:22:27.080Z","status":"ssl_error","status_checked_at":"2026-04-12T06:21:52.710Z","response_time":58,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: 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":["apache","bash","codeception","fabric","lms","mailcatcher","node","paypal-rest-api","phalcon","php","python","webpack"],"created_at":"2024-11-13T17:07:52.699Z","updated_at":"2026-04-12T06:33:34.112Z","avatar_url":"https://github.com/JREAM.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# JREAM 7.0\nThis is the website I built for JREAM LLC several years ago.\nThis remains for a portfolio piece of code. This document is not conclusive. The code was written by me and for me. :-)\n\n- **Overview**\n- Written in [Phalcon PHP](https://phalcon.io) framework.\n- VPS Hosted on Ubuntu LTS Server ([Linode](https://www.linode.com)).\n  - PHP 7\n  - Apache 2\n  - WebPack for Assets\n    - SaaS\n    - Misc Images\n    - Webpack Mix\n    - _Packages are out of date of course :)_\n  - Ruby Mailcatcher for Testing Emails\n  - PHP Codeception for Tests\n  - Python Fabric for Basic Deployment Tasks\n  - Bash `cli.sh` for Phalcon Based `app/Tasks`\n- Developed as a paid SaaS/LMS for courses I recorded.\n- Blog Submodule, however `.gitmodules` of `jream/blog` is no longer available.\n- Features Hosted through AWS:\n  - Multi A-Z MySQL Database.\n    - AWS MySQL RDB (Upfront).\n  - Streaming Video and Images:\n    - AWS S3 Storage.\n    - AWS CloudFront for RMTP Streaming.\n  - 3rd Party Streaming Video Player\n- Paid Members for Full Courses (Stripe API).\n- API Keys are Rolled/Not Active:\n  - Paypal REST API.\n  - Stripe REST API.\n\n## Preview Images\n\n![jream-00](https://private-user-images.githubusercontent.com/145959/346989307-f5b63321-8651-4f36-a95b-18c9d6edc7ef.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MjA1MzQ0OTMsIm5iZiI6MTcyMDUzNDE5MywicGF0aCI6Ii8xNDU5NTkvMzQ2OTg5MzA3LWY1YjYzMzIxLTg2NTEtNGYzNi1hOTViLTE4YzlkNmVkYzdlZi5wbmc_WC1BbXotQWxnb3JpdGhtPUFXUzQtSE1BQy1TSEEyNTYmWC1BbXotQ3JlZGVudGlhbD1BS0lBVkNPRFlMU0E1M1BRSzRaQSUyRjIwMjQwNzA5JTJGdXMtZWFzdC0xJTJGczMlMkZhd3M0X3JlcXVlc3QmWC1BbXotRGF0ZT0yMDI0MDcwOVQxNDA5NTNaJlgtQW16LUV4cGlyZXM9MzAwJlgtQW16LVNpZ25hdHVyZT1mMDQ0ZThkZTRlMGQ2YWQ1ZGQ0ZDY0OWM2YzFjNDQyYTU3MjVkY2I0NGVjZWUwM2UyMDI5OTIyMzFmOTZkYzg1JlgtQW16LVNpZ25lZEhlYWRlcnM9aG9zdCZhY3Rvcl9pZD0wJmtleV9pZD0wJnJlcG9faWQ9MCJ9.tim-Nt1SfSpZYgSS23TAb3-pZXn2aa8mYL04ozqu6D8)\n\n![jream-01](https://private-user-images.githubusercontent.com/145959/346989311-8a9caed0-0062-4ba8-b55c-2c195531fbb4.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MjA1MzQ0OTMsIm5iZiI6MTcyMDUzNDE5MywicGF0aCI6Ii8xNDU5NTkvMzQ2OTg5MzExLThhOWNhZWQwLTAwNjItNGJhOC1iNTVjLTJjMTk1NTMxZmJiNC5wbmc_WC1BbXotQWxnb3JpdGhtPUFXUzQtSE1BQy1TSEEyNTYmWC1BbXotQ3JlZGVudGlhbD1BS0lBVkNPRFlMU0E1M1BRSzRaQSUyRjIwMjQwNzA5JTJGdXMtZWFzdC0xJTJGczMlMkZhd3M0X3JlcXVlc3QmWC1BbXotRGF0ZT0yMDI0MDcwOVQxNDA5NTNaJlgtQW16LUV4cGlyZXM9MzAwJlgtQW16LVNpZ25hdHVyZT1lNDc5OGFjNzRlMjk4OWFhMWM2ODZiM2IwNzZkYTUzNzg4ODhkZGIxMjdiYjY5OTg0MzhlY2M3ZjhlOWMxM2MxJlgtQW16LVNpZ25lZEhlYWRlcnM9aG9zdCZhY3Rvcl9pZD0wJmtleV9pZD0wJnJlcG9faWQ9MCJ9.8UgX1bnIS0XaMnZujrMLOcE0wfclQYd3x2ujSpP2Kns)\n\n## Dev Subdomain\n\nAt the time, this was setup using Apache. I'd likely use Nginx now but here's the configuration.\n\n- Make a `.htpasswd` to protect the `dev` URL.\n```bash\ncd /etc/apache2/htpasswd\nhtpasswd -cB dev_jream.htpasswd jesse\n```\n\n- Setup the Apache Config:\n\n```apacheconfig\n\u003cVirtualHost *:80\u003e\n    ServerName dev.jream.com\n    ServerAdmin hello@jream.com\n\n    # Notice the /dev/ subfolder\n    DocumentRoot /var/www/dev/jream.com/public\n    DirectoryIndex index.php\n\n    \u003cDirectory /var/www/dev/jream.com/public\u003e\n    Options Indexes FollowSymLinks\n    AllowOverride All\n    #Require all granted\n\n    # Path to the generated .htpasswd\n    AuthUserFile /etc/apache2/htpasswd/dev_jream.htpasswd\n    AuthType Basic\n    AuthName \"Develop Area\"\n    Require valid-user\n\n    Order Allow,Deny\n    Deny from All\n\n    Satisfy Any\n    \u003c/Directory\u003e\n\n\u003c/VirtualHost\u003e\n```\n\n## Setup Mailcatcher\n\n- For localhost email testing use mailcatcher with Ruby\n\n```bash\ngem install mailcatcher\nmailcatcher\n```\n\n- Configure PHP settings for Mailcatcher\n\n```yaml\nMailpath: /usr/bin/sendmail\nProtocol: smtp\nHost: localhost\nPort: 1025\n```\n\n- Go to http://localhost:1080/\n- Send mail through smtp://localhost:1025\n\n### Using Codeception\n\n- From the root folder (Where you can see `/vendor/`) run:\n\n```bash\nvendor/bin/codecept run\n```\n\n### Server Cache\n\n- Make sure the application/cache folder is writable.\n- If setting up a `/dev` path it would also be required there.\n\n```bash\nchown -R www-data:www-data /var/www/jream.com\nusermod -a -G www-data jesse\nchmod 770 -R /var/www/jream.com\n```\n\n### PayPal Test Credentials\n\n- Get the PayPal credentials from the API.\n\n```yaml\nPaypal Test: username-facilitator@gmail.com\n```\n\n## Apache Configuration\n\nTo create an .htpasswd for the development environment run `sudo htpasswd -c /etc/apache2/.htpasswd \u003cusername\u003e`\n\n```apache\n    ServerName jream.com\n    \u003cVirtualHost *:80\u003e\n            ServerAdmin server@jream.com\n            ServerName  jream.com\n            ServerAlias jream.com www.jream.com\n\n            # Indexes + Directory Root.\n            DirectoryIndex index.php\n            DocumentRoot /var/www/jream.com/htdocs/public/\n\n            # Logfiles\n            ErrorLog  /var/www/logs/error.jream.com.log\n            CustomLog /var/www/logs/access.jream.com.log combined\n    \u003c/VirtualHost\u003e\n\n    \u003cVirtualHost *:80\u003e\n        ServerAdmin server@jream.com\n        ServerName dev.jream.com\n        ServerAlias dev.jream.com\n\n        # Indexes + Directory Root.\n        DirectoryIndex index.php\n        DocumentRoot /var/www/dev.jream.com/htdocs/public\n\n        # Protect\n        \u003cDirectory /var/www/dev.jream.com/htdocs/public\u003e\n            AuthType Basic\n            AuthName \"Restricted Content\"\n            AuthUserFile /etc/apache2/.htpasswd\n            Require valid-user\n        \u003c/Directory\u003e\n\n        # Logfiles\n        ErrorLog /var/www/logs/error.dev.jream.com.log\n        CustomLog /var/www/logs/access.dev.jream.com.log combined\n    \u003c/VirtualHost\u003e\n\n    \u003cVirtualHost *:443\u003e\n            ServerAdmin server@jream.com\n            ServerName  jream.com\n            ServerAlias jream.com\n\n            # Indexes + Directory Root.\n            DirectoryIndex index.php\n            DocumentRoot /var/www/jream.com/htdocs/public/\n\n            # Logfiles\n            ErrorLog  /var/www/logs/error.ssl.jream.com.log\n            CustomLog /var/www/logs/access.ssl.jream.com.log combined\n\n            # SSL\n            SSLEngine on\n            SSLCertificateFile /etc/apache2/ssl/jream.com/jream_com.crt\n            SSLCertificateKeyFile /etc/apache2/ssl/jream.com/server.key\n            SSLCACertificateFile /etc/apache2/ssl/jream.com/jream_com.cer\n    \u003c/VirtualHost\u003e\n```\n\n# Testing\n\n- Use codeception, which can be symlinked from composer via:\n\n```bash\nln -s vendor/bin/codecept .\n```\n\n- If nothing exists, bootstrap it with:\n\n```bash\n./codecept build\n```\n\n- Create a Test with:\n\n```bash\n./codecept generate:cept acceptance Welcome\n```\n\n- Then you'd write a file here: `tests/acceptance/WelcomeCept.php`\n\n```php\n\u003c?php\n$I = new AcceptanceTester($scenario);\n$I-\u003ewantTo('ensure that frontpage works');\n$I-\u003eamOnPage('/');\n$I-\u003esee('Home');\n```\n\n- With an active PHP directory, add the host here:\n\n```\ntests/acceptance.suite.yml\n```\n\nThen run the test with\n\n```bash\n./codecept run\n```\n\n# Crashplan\n\nIf the servers go haywire these things must be done:\n\n- Make sure MySQL has access to the `HOST IP` (_Using AWS RDB_)\n- Check the `DNS` in `AWS RDB`, Look at `Health Check`\n- Make sure `Composer` is Updated\n- Check `/var/logs/apache2/error.log`\n\n\n## Fix for Webpack SASS\n\n(_legacy_) So the easiest fix for now is to downgrade to npm@5.1.0 using\n\n```bash\nnpm i -g npm@5.1.0\n```\nThen cleanup and reinstall dependencies:\n```\nnpm cache clean -f\nrm -rf node_modules/ package-lock.json\nnpm i\n```\n\n\n## TODO\n\nThis list is expired, some features will no longer be added.\n\n- [ ] (Skip) Middleware CSRF Token.\n- [ ] HLS with HTML5 through RMTP.\n- [ ] Check Promotion for Expiration, ONLY IF THEY APPLY IT\n- [ ] Make URL so promotion can trigger in a cookie and stay alive.\n- [ ] Test out the pricing with the percentages!\n- [ ] Test out the pricing with the price~\n- eg:\n  - [ ] Promotions Table has no product_id and no user_id, it applies to ALL users globally.\n  - [ ] Promotions Table has two records with product_id, it applies ONLY to those products\n  - [ ] Promotion ALWAYS checks DELETED_AT, and EXPIRES_AT before doing anything.\n- [ ] This will apply to the STANDARD promo code page (regular check)\n- [ ] This will apply to the new checkout page.\n\n\n---\n\nMIT Open Source\n\n\u0026copy; 2018 JREAM.com | Jesse Boyer\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjream%2Fphp-saas-jream","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fjream%2Fphp-saas-jream","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjream%2Fphp-saas-jream/lists"}