{"id":51873701,"url":"https://github.com/stats4sd/resources-site-template","last_synced_at":"2026-07-25T03:30:37.710Z","repository":{"id":369105839,"uuid":"1276972651","full_name":"stats4sd/resources-site-template","owner":"stats4sd","description":null,"archived":false,"fork":false,"pushed_at":"2026-07-15T16:14:01.000Z","size":37530,"stargazers_count":0,"open_issues_count":5,"forks_count":1,"subscribers_count":0,"default_branch":"dev","last_synced_at":"2026-07-15T18:11:48.412Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"PHP","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/stats4sd.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,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-06-22T13:14:58.000Z","updated_at":"2026-07-09T00:40:56.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/stats4sd/resources-site-template","commit_stats":null,"previous_names":["stats4sd/resources-site-template"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/stats4sd/resources-site-template","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/stats4sd%2Fresources-site-template","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/stats4sd%2Fresources-site-template/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/stats4sd%2Fresources-site-template/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/stats4sd%2Fresources-site-template/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/stats4sd","download_url":"https://codeload.github.com/stats4sd/resources-site-template/tar.gz/refs/heads/dev","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/stats4sd%2Fresources-site-template/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":35864845,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-07-20T02:08:10.276Z","status":"online","status_checked_at":"2026-07-25T02:00:06.922Z","response_time":64,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"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":[],"created_at":"2026-07-25T03:30:36.874Z","updated_at":"2026-07-25T03:30:37.705Z","avatar_url":"https://github.com/stats4sd.png","language":"PHP","funding_links":[],"categories":[],"sub_categories":[],"readme":"## Resources Site Template\n\n## Setup for Local Development\n\n1. Clone the repository\n2. Copy the .env.example file to .env\n3. In the .env file add your database credentials and set `BRAND_ORG_NAME`. See `config/branding.php` for the full list of branding options including colours, logo, and images.\n4. Create the local MySQL database if needed (e.g. `mysql -u root -e \"CREATE DATABASE resources_site_template;\"`)\n5. Run `composer install` to install PHP dependencies\n6. Run `npm install` to install JavaScript dependencies\n7. Run `php artisan key:generate` to set the application key\n8. Run `php artisan migrate --seed` to set up the database with tables and seed\n9. Run `npm run dev` to set Vite running, which reloads assets on changes\n10. If you're using Laravel Valet or Herd, go to `http://resources-site-template.test` in your browser. Otherwise, run `php artisan serve` and go to the provided URL.\n\nIf you've run the seeders, you can log in with test@example.com and password 'password'.\n\nTo seed example troves, collections, and tags for local development, run the example data seeder separately after the main seed:\n\n```\nphp artisan db:seed --class=\"Database\\Seeders\\Example\\ExampleDataSeeder\"\n```\n\n### File Storage (AWS S3)\n\nThe app uses AWS S3 for file storage. Set up an S3 bucket and add your credentials to `.env` — see `.env.example` for the required `AWS_*` variables. It's recommended to use S3 locally too so your setup matches production.\n\nIf you don't have S3 set up, you can use the local public disk for development by setting `FILESYSTEM_DISK=local` and `MEDIA_DISK=public` in your `.env`, then running `php artisan storage:link`. Note that files won't persist in the same way as S3.\n\n### Meilisearch\n\nSearch is powered by Meilisearch. The `SCOUT_DRIVER` config defaults to `null` (search disabled, no external service required), so search only works once you explicitly set `SCOUT_DRIVER=meilisearch` in your `.env` and have Meilisearch running. To keep search disabled locally, either leave `SCOUT_DRIVER` unset or set it to `null`.\n\nTo run Meilisearch locally:\n\n1. Install Meilisearch - instructions [here](https://www.meilisearch.com/docs/learn/getting_started/installation).\n2. Run `meilisearch --master-key=\"aSampleMasterKey\"` - keep this running in a separate terminal window.\n3. In your `.env`, uncomment/set `SCOUT_DRIVER=meilisearch` and check `MEILISEARCH_HOST`/`MEILISEARCH_KEY` match the instance above (`MEILISEARCH_KEY` must match the `--master-key` you started Meilisearch with).\n4. `SCOUT_QUEUE=true` by default, so index updates are queued - make sure a queue worker is running (`php artisan queue:work` or `php artisan queue:listen`), since `QUEUE_CONNECTION=database`.\n5. Push the index settings (filterable/sortable/searchable attributes, defined per-model in `config/scout.php`) to Meilisearch, then import existing records:\n\n```\nphp artisan scout:sync-index-settings\nphp artisan scout:import \"App\\Models\\Trove\"\nphp artisan scout:import \"App\\Models\\Collection\"\n```\n\nRe-run both sync-index-settings and the import commands whenever you change a model's `toSearchableArray()` or the `index-settings` block in `config/scout.php`.\n\n**In production:** Meilisearch is required for the full ranked/faceted browse experience — without it (`SCOUT_DRIVER` unset/`null`, or the engine unreachable) `BrowseAll` degrades to an unranked, date-ordered database listing with a \"search unavailable\" notice; filters still work, but there's no relevance ranking, typo tolerance or facet counts. On first deploy, and again after any schema/index change, run `scout:sync-index-settings` then `scout:import` for both `App\\Models\\Trove` and `App\\Models\\Collection`. Set `SCOUT_QUEUE=true` (queues index updates instead of running them synchronously in the request) and keep a queue worker running (`php artisan queue:work`). The Laravel scheduler must also be running (cron calling `php artisan schedule:run` every minute, or `schedule:work` under Supervisor) — it drives a nightly `scout:import` reconciliation for both models (`app/Console/Kernel.php`) that repairs any index drift left by a request where the engine was briefly unreachable.","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fstats4sd%2Fresources-site-template","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fstats4sd%2Fresources-site-template","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fstats4sd%2Fresources-site-template/lists"}