{"id":19878791,"url":"https://github.com/veliovgroup/meteor-files-website","last_synced_at":"2025-05-02T13:31:01.027Z","repository":{"id":51934791,"uuid":"308376543","full_name":"veliovgroup/meteor-files-website","owner":"veliovgroup","description":"File sharing PWA. Upload and share at files.veliov.com","archived":false,"fork":false,"pushed_at":"2023-07-05T19:22:01.000Z","size":1877,"stargazers_count":14,"open_issues_count":0,"forks_count":12,"subscribers_count":4,"default_branch":"master","last_synced_at":"2024-05-01T11:29:14.030Z","etag":null,"topics":["meteor","meteor-application"],"latest_commit_sha":null,"homepage":"https://files.veliov.com","language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"bsd-3-clause","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/veliovgroup.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":".github/FUNDING.yml","license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null},"funding":{"github":"dr-dimitru","custom":"https://paypal.me/veliovgroup"}},"created_at":"2020-10-29T15:50:34.000Z","updated_at":"2024-02-21T15:56:06.000Z","dependencies_parsed_at":"2023-01-23T14:30:13.088Z","dependency_job_id":null,"html_url":"https://github.com/veliovgroup/meteor-files-website","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/veliovgroup%2Fmeteor-files-website","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/veliovgroup%2Fmeteor-files-website/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/veliovgroup%2Fmeteor-files-website/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/veliovgroup%2Fmeteor-files-website/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/veliovgroup","download_url":"https://codeload.github.com/veliovgroup/meteor-files-website/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":224315370,"owners_count":17290992,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","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":["meteor","meteor-application"],"created_at":"2024-11-12T17:06:37.899Z","updated_at":"2025-05-02T13:31:01.021Z","avatar_url":"https://github.com/veliovgroup.png","language":"JavaScript","funding_links":["https://github.com/sponsors/dr-dimitru","https://paypal.me/veliovgroup"],"categories":[],"sub_categories":[],"readme":"[![support](https://img.shields.io/badge/support-GitHub-white)](https://github.com/sponsors/dr-dimitru)\n[![support](https://img.shields.io/badge/support-PayPal-white)](https://paypal.me/veliovgroup)\n\u003ca href=\"https://ostr.io/info/built-by-developers-for-developers?ref=meteor-files-website-repo-top\"\u003e\u003cimg src=\"https://ostr.io/apple-touch-icon-60x60.png\" height=\"20\"\u003e\u003c/a\u003e\n\u003ca href=\"https://meteor-files.com/?ref=meteor-files-website-repo-top\"\u003e\u003cimg src=\"https://meteor-files.com/apple-touch-icon-60x60.png\" height=\"20\"\u003e\u003c/a\u003e\n\n# File sharing web app\n\nThis is repository with codebase of the web application available at [files.veliov.com](https://files.veliov.com/). It's fully-featured file-sharing service build on top of [`ostrio:files` library](https://github.com/veliovgroup/Meteor-Files) and [meteor.js](https://docs.meteor.com).\n\nThis is third reincarnation of this webapp, most of changes in this release made during [Impact Meteor Conference 2020](https://impact.meteor.com) to showcase Meteor usage building modern webapps.\n\nAwarded by Meteor Chef with [GCAA 2016](https://themeteorchef.com/blog/giant-cotton-apron-awards-show). Used by [thousands Meteor developers](https://atmospherejs.com/ostrio/files) to manage files and uploads in Meteor.js apps.\n\nBacked by [veliovgroup](https://veliovgroup.com), sponsored by [ostr.io](https://ostr.io), [meteor-files.com](https://meteor-files.com/), and [awesome community members](https://github.com/veliovgroup/Meteor-Files#supporters). Idea, design, development, maintenance, and support by [@smart_egg](https://twitter.com/smart_egg) and [@veliovgroup](https://twitter.com/veliovgroup).\n\n## ToC:\n\n- [Links](https://github.com/veliovgroup/meteor-files-website#links)\n- [Goals](https://github.com/veliovgroup/meteor-files-website#goals) of this project\n- [Features](https://github.com/veliovgroup/meteor-files-website#functionality)\n- [Quick start](https://github.com/veliovgroup/meteor-files-website#quick-start)\n  - [Activate AWS:S3](https://github.com/veliovgroup/meteor-files-website#activate-awss3)\n  - [Activate Web Push Notifications](https://github.com/veliovgroup/meteor-files-website#activate-web-push-notifications)\n  - [Change application settings](https://github.com/veliovgroup/meteor-files-website#application-settings)\n- [Deploy this app](https://github.com/veliovgroup/meteor-files-website#deployment)\n- [SEO](https://github.com/veliovgroup/meteor-files-website#seo)\n  - [`title` and `meta` tags](https://github.com/veliovgroup/meteor-files-website#meta-tags-and-title)\n  - [Pre-rendering](https://github.com/veliovgroup/meteor-files-website#pre-rendering)\n- [Debugging](https://github.com/veliovgroup/meteor-files-website#debugging)\n- ❤️ [Support this project](https://github.com/veliovgroup/meteor-files-website#support-this-project)\n\n## Links:\n\n- Website: __[files.veliov.com](https://files.veliov.com/)__\n- Meteor's [tutorials repository](https://github.com/veliovgroup/meteor-snippets#meteor-snippets) inspired by this app\n- [`ostrio:files`](https://github.com/veliovgroup/Meteor-Files) library\n- Self-hosted (Nginx + Phusion Passenger) [deploy tutorial](https://github.com/veliovgroup/meteor-snippets/tree/main/devops#deploy)\n- Hekoru [deploy instructions](https://github.com/veliovgroup/meteor-files-website/blob/master/heroku-deploy.md)\n\n## Goals\n\nGoals of this open source web application:\n\n- Showcase usage of [`ostrio:files` library](https://github.com/veliovgroup/Meteor-Files)\n- Showcase usage of ServiceWorker with Meteor\n- Showcase implementing fully-featured PWA (*including push-notifications*) using Meteor\n- Build good and open source solution to quickly upload and share files\n\n## Functionality:\n\n- 📑 Upload / Download Files\n- 🗂 Drag'n'drop support for files and directories (*including nested directories*)\n- 🗄 Use AWS:S3 as a storage\n- 📲 PWA with Push Notifications\n- 🚀 Upload via `HTTP` and/or `DDP`\n\n## Quick start:\n\nApplication is ready to be used as it is without need of extra configuration. Optionally there's a lot of room for changing settings to meet required features, like store files in AWS:S3, send Web Push Notifications via APNs when file is fully loaded and moved to long-term storage.\n\n- [Activate AWS:S3](https://github.com/veliovgroup/meteor-files-website#activate-awss3)\n- [Activate Web Push Notifications](https://github.com/veliovgroup/meteor-files-website#activate-web-push-notifications)\n- [Change application settings](https://github.com/veliovgroup/meteor-files-website#application-settings)\n\n### Activate AWS:S3\n\n1. Read [this article](https://github.com/veliovgroup/Meteor-Files/wiki/AWS-S3-Integration)\n2. After creating S3 bucket, create CloudFront Distribution and attach it to S3 bucket\n3. Set S3 credentials into `METEOR_SETTINGS` env.var or pass as the file, read [here for more info](http://docs.meteor.com/#/full/meteor_settings), alternatively (*if something not working*) set `S3` env.var\n4. You can pass S3 credentials as JSON-string when using \"*Heroku's one click install-button*\"\n\nS3 credentials format (*region is required*):\n\n```json\n{\n  \"app\": {\n    \"s3\": {\n      \"key\": \"xxx\",\n      \"secret\": \"xxx\",\n      \"bucket\": \"xxx\",\n      \"region\": \"xxx\"\n    }\n  }\n}\n```\n\n### Activate Web Push Notifications\n\n1. Install [`web-push` NPM](https://www.npmjs.com/package/web-push) package\n2. Generate key-pair using `webpush.generateVAPIDKeys()`;\n3. Set VAPID credentials into `METEOR_SETTINGS` env.var or pass as the file, read [here for more info](http://docs.meteor.com/#/full/meteor_settings)\n\nVAPID credentials format:\n\n```json\n{\n  \"public\": {\n    \"vapid\": {\n      \"publicKey\": \"\"\n    }\n  },\n  \"app\": {\n    \"vapid\": {\n      \"email\": \"mailto:webmaster@example.com\", // SET TO REAL EMAIL\n      \"privateKey\": \"\"\n    }\n  }\n}\n```\n\n### Application settings\n\nAll supported and annotated settings\n\n```js\n{\n  \"debug\": false, // Enable debug mode on a Server\n  \"app\" { // application server-settings\n    \"storagePath\": \"/data/meteor-files/uploads\", // LOCAL STORAGE ON THE SERVER\n    \"continueUploadTTL\": 10800, // RESUMALBE UPLOADS TTL\n    \"spiderable\": { // `spiderable-middleware` package settings\n      \"auth\": \"\"\n    },\n    \"s3\": { // AWS:S#3 CLOUD STORAGE CREDENTIALS\n      \"key\": \"\",\n      \"secret\": \"\",\n      \"bucket\": \"\",\n      \"region\": \"\"\n    },\n    \"vapid\": { // VAPID WEB PUSH NOTIFICATIONS CONFIGURATION\n      \"email\": \"mailto:webmaster@example.com\", // WEB PUSH NOTIFICATION EMAIL\n      \"privateKey\": \"\" // WEB PUSH NOTIFICATION PRIVATE KEY\n    }\n  },\n  \"public\": {\n    \"debug\": false, // Enable debug mode on a Client (Browser)\n    \"maxFileSizeMb\": 1024, // MAXIMUM UPLOAD FILE-SIZE IN MEGABYTES (1024mb ~= 1GB)\n    \"maxFilesQty\": 8, // MAXIMUM AMOUNT OF SIMULTANEOUSLY UPLOADED FILES\n    \"fileTTLSec\": 259200, // 3 days; FILE'S TTL IN SECONDS\n    \"vapid\": { // VAPID WEB PUSH NOTIFICATIONS CONFIGURATION\n      \"publicKey\": \"\" // WEB PUSH NOTIFICATION PUBLIC KEY\n    },\n    \"trackingId\": \"\" // trackingId for ostrio-analytics package\n  }\n}\n```\n\n## Deployment\n\nLearn more about DevOps, deployment, and running this app live in [DevOps and Deployment tutorial](https://github.com/veliovgroup/meteor-snippets/tree/main/devops).\n\n## SEO\n\nTo make this project \"crawlable\" by search engines, social networks, and web-crawlers on this project we are using:\n\n- [`ostrio:flow-router-meta`](https://github.com/veliovgroup/Meteor-flow-router-meta) package to generate meta-tags and title\n- [Pre-rendering](https://prerendering.com/) service to serve rendered HTML to crawlers and search engines\n\n### Meta tags and title\n\nUsing [`ostrio:flow-router-meta`](https://github.com/veliovgroup/Meteor-flow-router-meta) package controlling meta-tags content as easy as extending *FlowRouter* definition with `{ meta, title, link }` properties:\n\n```js\nFlowRouter.route('/about', {\n  name: 'about',\n  title: 'About',\n  meta: {\n    description: 'About file-sharing web application'\n  },\n  action() {\n    this.render('layout', 'about');\n  }\n});\n```\n\nSet default meta tags and page title using `FlowRouter.globals.push({ meta })`:\n\n```js\nconst title = 'Default page title up to 65 symbols';\nconst description = 'Default description up to 160 symbols';\n\nFlowRouter.globals.push({ title });\nFlowRouter.globals.push({\n  meta: {\n    description,\n    robots: 'index, follow',\n    keywords: 'keywords, separated, with, comma'\n  }\n});\n```\n\nActivate `meta` and `title` packages:\n\n```js\nimport { FlowRouter } from 'meteor/ostrio:flow-router-extra';\nimport { FlowRouterMeta, FlowRouterTitle } from 'meteor/ostrio:flow-router-meta';\n\n/* ... DEFINE FLOWROUTER RULES HERE, BEFORE INIT ... */\n\nnew FlowRouterTitle(FlowRouter);\nnew FlowRouterMeta(FlowRouter);\n```\n\n### Pre-rendering\n\nTo pre-render JS-driven templates (Blaze, React, Vue, etc.) to HTML we are using [pre-rendering](https://prerendering.com/) via [`siderable-middleware` package](https://github.com/veliovgroup/spiderable-middleware#meteor-specific-usage):\n\n```js\n/*\n * @locus Server\n */\n\nimport { Meteor } from 'meteor/meteor';\nimport { WebApp } from 'meteor/webapp';\nimport Spiderable from 'meteor/ostrio:spiderable-middleware';\n\nWebApp.connectHandlers.use(new Spiderable({\n  serviceURL: 'https://render.ostr.io',\n  auth: 'pass:login',\n  only: [/^\\/?$/, /^\\/about\\/?$/i, /^\\/f\\/[A-z0-9]{16}\\/?$/i]\n}));\n\n// Allow pre-rendering only for existing public routes: `/index`, `/about`, and `/f/file_id`\n```\n\nPre-rendering getting activated by setting `spiderable.auth` property in `METEOR_SETTINGS` environment variable or [`settings.json`](https://github.com/veliovgroup/meteor-files-website/blob/master/settings.json) on a dev stage.\n\n## Debugging\n\nHaving an issue running this web application? Try next options to find out why:\n\n### On a server\n\nSet environment variable `DEBUG` to `true` or `{ debug: true }` in the [settings file](https://docs.meteor.com/api/core.html#Meteor-settings) passed via `--settings` option. This will enable logging mode in the meteor-files package\n\n### On a client (browser)\n\nSet `{ public: { debug: true } }` in the [settings file](https://docs.meteor.com/api/core.html#Meteor-settings) passed via `--settings` option. This will enable logging mode in the meteor-files package and other components of the web application\n\n## Support our open source contributions\n\n- Upload and share files using [☄️ meteor-files.com](https://meteor-files.com/?ref=meteor-files-website-repo-footer) — Continue interrupted file uploads without losing any progress. There is nothing that will stop Meteor from delivering your file to the desired destination\n- Use [▲ ostr.io](https://ostr.io?ref=meteor-files-website-repo-footer) for [Server Monitoring](https://snmp-monitoring.com), [Web Analytics](https://ostr.io/info/web-analytics?ref=meteor-files-website-repo-footer), [WebSec](https://domain-protection.info), [Web-CRON](https://web-cron.info) and [SEO Pre-rendering](https://prerendering.com) of a website\n- [Sponsor via GitHub](https://github.com/sponsors/dr-dimitru)\n- [Support via PayPal](https://paypal.me/veliovgroup)\n- Star this project on [GitHub](https://github.com/veliovgroup/Meteor-Files)\n- Star this project on [Atmosphere](https://atmospherejs.com/ostrio/files)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fveliovgroup%2Fmeteor-files-website","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fveliovgroup%2Fmeteor-files-website","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fveliovgroup%2Fmeteor-files-website/lists"}