├── .dockerignore
├── .env.example
├── .eslintignore
├── .eslintrc.cjs
├── .github
├── FUNDING.yml
├── ISSUE_TEMPLATE
│ ├── bug_report.md
│ └── feature_request.md
├── dependabot.yml
└── workflows
│ ├── ci.yml
│ └── codeql.yml
├── .gitignore
├── .npmrc
├── CODE_OF_CONDUCT.md
├── CONTRIBUTING.md
├── Dockerfile
├── LICENSE
├── README.md
├── SECURITY.md
├── docker-compose.yml
├── faviconDescription.json
├── jsconfig.json
├── logo.svg
├── package-lock.json
├── package.json
├── playwright.config.js
├── src
├── app.d.ts
├── app.html
├── app.scss
├── css
│ ├── dark-theme.scss
│ ├── light-theme.scss
│ └── styles.css
├── hooks.server.js
├── js
│ ├── toast.js
│ └── translations.js
├── lib
│ ├── charts
│ │ ├── PieChart.svelte
│ │ └── StackedBarLineChart.svelte
│ ├── forms
│ │ ├── AlignSelect.svelte
│ │ ├── Button.svelte
│ │ ├── ColorInput.svelte
│ │ ├── CoordinatesInput.svelte
│ │ ├── DateInput.svelte
│ │ ├── EmailInput.svelte
│ │ ├── PasswordInput.svelte
│ │ ├── PhoneInput.svelte
│ │ ├── RangeInput.svelte
│ │ ├── SearchInput.svelte
│ │ ├── SocialIconLink.svelte
│ │ ├── SocialIconTextInput.svelte
│ │ ├── Switch.svelte
│ │ ├── TextInput.svelte
│ │ ├── TextareaInput.svelte
│ │ ├── TimeZoneSelect.svelte
│ │ └── UploadFile.svelte
│ ├── layout
│ │ ├── AdminMain.svelte
│ │ ├── Divider.svelte
│ │ ├── Heading.svelte
│ │ ├── IconLink.svelte
│ │ ├── NavbarTop.svelte
│ │ ├── Preview.svelte
│ │ └── menus
│ │ │ ├── MenuDivider.svelte
│ │ │ ├── desktop
│ │ │ ├── DesktopMenu.svelte
│ │ │ └── DesktopMenuItem.svelte
│ │ │ └── mobile
│ │ │ └── MobileMenu.svelte
│ ├── logo
│ │ └── Logo.svelte
│ ├── maps
│ │ └── Map.svelte
│ ├── nfc
│ │ └── Nfc.svelte
│ ├── pagination
│ │ └── Pagination.svelte
│ ├── theme
│ │ └── ThemeToggle.svelte
│ └── vCard
│ │ ├── BusinessCard.svelte
│ │ ├── DisplayPreview.svelte
│ │ ├── VCard.svelte
│ │ └── views
│ │ ├── MobileView.svelte
│ │ └── ProductionView.svelte
├── routes
│ ├── +error.svelte
│ ├── +layout.svelte
│ ├── +page.server.js
│ ├── admin
│ │ ├── +page.server.js
│ │ ├── +page.svelte
│ │ ├── themes
│ │ │ ├── +page.server.js
│ │ │ ├── +page.svelte
│ │ │ └── [id]
│ │ │ │ ├── +page.server.js
│ │ │ │ └── +page.svelte
│ │ ├── users
│ │ │ ├── +page.server.js
│ │ │ └── +page.svelte
│ │ └── vcard
│ │ │ ├── +page.server.js
│ │ │ └── +page.svelte
│ ├── login
│ │ ├── +page.server.js
│ │ └── +page.svelte
│ ├── p
│ │ └── [id]
│ │ │ └── t
│ │ │ └── [themeId]
│ │ │ ├── +page.js
│ │ │ └── +page.svelte
│ ├── qr
│ │ └── [id]
│ │ │ └── t
│ │ │ └── [themeId]
│ │ │ ├── +page.js
│ │ │ └── +page.svelte
│ └── reset
│ │ ├── +page.server.js
│ │ └── +page.svelte
└── variables.scss
├── static
├── android-chrome-192x192.png
├── android-chrome-512x512.png
├── apple-touch-icon.png
├── browserconfig.xml
├── favicon-16x16.png
├── favicon-194x194.png
├── favicon-32x32.png
├── favicon.ico
├── js
│ └── bootstrap.bundle.min.js
├── mstile-150x150.png
├── robots.txt
├── safari-pinned-tab.svg
└── site.webmanifest
├── svelte.config.js
├── tests
└── test.js
└── vite.config.js
/.dockerignore:
--------------------------------------------------------------------------------
1 | fly.toml
2 | Dockerfile
3 | .dockerignore
4 | node_modules
5 | .git
6 | .idea
7 | .env
8 |
--------------------------------------------------------------------------------
/.env.example:
--------------------------------------------------------------------------------
1 | PUBLIC_REST_API_URL=
2 | PUBLIC_BASE_URL=
3 |
--------------------------------------------------------------------------------
/.eslintignore:
--------------------------------------------------------------------------------
1 | .DS_Store
2 | node_modules
3 | /build
4 | /.svelte-kit
5 | /package
6 | .env
7 | .env.*
8 | !.env.example
9 | /static
10 | /test-results
11 |
12 | # Ignore files for PNPM, NPM and YARN
13 | pnpm-lock.yaml
14 | package-lock.json
15 |
--------------------------------------------------------------------------------
/.eslintrc.cjs:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | env: {
3 | browser: true,
4 | es2022: true
5 | },
6 | extends: 'airbnb-base',
7 | overrides: [],
8 | parserOptions: {
9 | ecmaVersion: 'latest',
10 | sourceType: 'module'
11 | },
12 | rules: {
13 | 'import/no-unresolved': 'off',
14 | 'import/extensions': 'off',
15 | 'import/prefer-default-export': 'off',
16 | 'import/no-extraneous-dependencies': 'off',
17 | },
18 | };
19 |
--------------------------------------------------------------------------------
/.github/FUNDING.yml:
--------------------------------------------------------------------------------
1 | github:
2 | - MathiasReker
3 |
4 |
--------------------------------------------------------------------------------
/.github/ISSUE_TEMPLATE/bug_report.md:
--------------------------------------------------------------------------------
1 | ---
2 | name: Bug report
3 | about: Create a report to help us improve
4 | title: ''
5 | labels: ''
6 | assignees: MathiasReker
7 |
8 | ---
9 |
10 | **Describe the bug**
11 | A clear and concise description of what the bug is.
12 |
13 | **To Reproduce**
14 | Steps to reproduce the behavior:
15 |
16 | 1. Go to '...'
17 | 2. Click on '....'
18 | 3. Scroll down to '....'
19 | 4. See error
20 |
21 | **Expected behavior**
22 | A clear and concise description of what you expected to happen.
23 |
24 | **Screenshots**
25 | If applicable, add screenshots to help explain your problem.
26 |
27 | **Additional context**
28 | Add any other context about the problem here.
29 |
--------------------------------------------------------------------------------
/.github/ISSUE_TEMPLATE/feature_request.md:
--------------------------------------------------------------------------------
1 | ---
2 | name: Feature request
3 | about: Suggest an idea for this project
4 | title: ''
5 | labels: ''
6 | assignees: MathiasReker
7 |
8 | ---
9 |
10 | **Is your feature request related to a problem? Please describe.**
11 | A clear and concise description of what the problem is. Ex. I'm always frustrated when [...]
12 |
13 | **Describe the solution you'd like**
14 | A clear and concise description of what you want to happen.
15 |
16 | **Describe alternatives you've considered**
17 | A clear and concise description of any alternative solutions or features you've considered.
18 |
19 | **Additional context**
20 | Add any other context or screenshots about the feature request here.
21 |
--------------------------------------------------------------------------------
/.github/dependabot.yml:
--------------------------------------------------------------------------------
1 | version: 2
2 | updates:
3 | - package-ecosystem: 'npm'
4 | directory: '/'
5 | schedule:
6 | interval: 'daily'
7 |
--------------------------------------------------------------------------------
/.github/workflows/ci.yml:
--------------------------------------------------------------------------------
1 | name: CI
2 |
3 | on:
4 | push:
5 | branches:
6 | - main
7 | pull_request:
8 | branches:
9 | - main
10 |
11 | jobs:
12 | build:
13 | runs-on: ubuntu-latest
14 |
15 | strategy:
16 | matrix:
17 | node-version:
18 | - '18.x'
19 |
20 | steps:
21 | - uses: actions/checkout@v3
22 |
23 | - name: Use Node.js ${{ matrix.node-version }}
24 | uses: actions/setup-node@v3
25 | with:
26 | node-version: ${{ matrix.node-version }}
27 | cache: 'npm'
28 |
29 | - name: Set up environment variables
30 | run: |
31 | echo PUBLIC_REST_API_URL="http://localhost:8080" >> $GITHUB_ENV
32 | echo PUBLIC_BASE_URL="http://localhost:5173" >> $GITHUB_ENV
33 |
34 | - run: npm ci
35 |
36 | - run: npx playwright install
37 |
38 | # - run: npm test
39 |
--------------------------------------------------------------------------------
/.github/workflows/codeql.yml:
--------------------------------------------------------------------------------
1 | name: CodeQL
2 |
3 | on:
4 | push:
5 | branches:
6 | - main
7 | pull_request:
8 | branches:
9 | - main
10 | schedule:
11 | - cron: '22 4 * * 3'
12 |
13 | jobs:
14 | analyze:
15 | name: Analyze
16 | runs-on: ubuntu-latest
17 | timeout-minutes: 360
18 | permissions:
19 | actions: read
20 | contents: read
21 | security-events: write
22 |
23 | strategy:
24 | fail-fast: false
25 | matrix:
26 | language:
27 | - 'javascript'
28 |
29 | steps:
30 | - name: Checkout repository
31 | uses: actions/checkout@v3
32 |
33 | - name: Initialize CodeQL
34 | uses: github/codeql-action/init@v2
35 | with:
36 | languages: ${{ matrix.language }}
37 |
38 | - name: Autobuild
39 | uses: github/codeql-action/autobuild@v2
40 |
41 | - name: Perform CodeQL Analysis
42 | uses: github/codeql-action/analyze@v2
43 | with:
44 | category: "/language:${{ matrix.language }}"
45 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | .DS_Store
2 | node_modules
3 | /build
4 | /.svelte-kit
5 | /package
6 | .env
7 | .env.*
8 | !.env.example
9 | .vercel
10 | .output
11 | vite.config.js.timestamp-*
12 | vite.config.ts.timestamp-*
13 | /.idea
14 | /test-results
15 |
--------------------------------------------------------------------------------
/.npmrc:
--------------------------------------------------------------------------------
1 | engine-strict=true
2 | resolution-mode=highest
3 |
--------------------------------------------------------------------------------
/CODE_OF_CONDUCT.md:
--------------------------------------------------------------------------------
1 | # Code of Conduct
2 |
3 | ## Our Pledge
4 |
5 | In the interest of fostering an open and welcoming environment, we as contributors and maintainers pledge to make
6 | participation in our project and our community a harassment-free experience for everyone, regardless of age, body size,
7 | disability, ethnicity, sex characteristics, gender identity and expression, level of experience, education,
8 | socio-economic status, nationality, personal appearance, race, religion, or sexual identity and orientation.
9 |
10 | ## Our Standards
11 |
12 | Examples of behavior that contributes to creating a positive environment include:
13 |
14 | - Using welcoming and inclusive language
15 | - Being respectful of differing viewpoints and experiences
16 | - Gracefully accepting constructive criticism
17 | - Focusing on what is best for the community
18 | - Showing empathy towards other community members
19 |
20 | Examples of unacceptable behavior by participants include:
21 |
22 | - The use of sexualized language or imagery and unwelcome sexual attention or advances
23 | - Trolling, insulting/derogatory comments, and personal or political attacks
24 | - Public or private harassment
25 | - Publishing others' private information, such as a physical or electronic address, without explicit permission
26 | - Other conduct which could reasonably be considered inappropriate in a professional setting
27 |
28 | ## Our Responsibilities
29 |
30 | Project maintainers are responsible for clarifying the standards of acceptable behavior and are expected to take
31 | appropriate and fair corrective action in response to any instances of unacceptable behavior.
32 |
33 | Project maintainers have the right and responsibility to remove, edit, or reject comments, commits, code, wiki edits,
34 | issues, and other contributions that are not aligned to this Code of Conduct, or to ban temporarily or permanently any
35 | contributor for other behaviors that they deem inappropriate, threatening, offensive, or harmful.
36 |
37 | ## Scope
38 |
39 | This Code of Conduct applies both within project spaces and in public spaces when an individual is representing the
40 | project or its community. Examples of representing a project or community include using an official project e-mail
41 | address, posting via an official social media account, or acting as an appointed representative at an online or offline
42 | event. Representation of a project may be further defined and clarified by project maintainers.
43 |
44 | ## Enforcement
45 |
46 | Instances of abusive, harassing, or otherwise unacceptable behavior may be reported by contacting the project team (add
47 | contact method). All complaints will be reviewed and investigated and will result in a response that is deemed necessary
48 | and appropriate to the circumstances. The project team is obligated to maintain confidentiality with regard to the
49 | reporter of an incident. Further details of specific enforcement policies may be posted separately.
50 |
51 | Project maintainers who do not follow or enforce the Code of Conduct in good faith may face temporary or permanent
52 | repercussions as determined by other members of the project's leadership.
53 |
54 | ## Attribution
55 |
56 | This Code of Conduct is adapted from the [Contributor Covenant](https://contributor-covenant.org), version 2.0,
57 | available at https://contributor-covenant.org/version/2/0/code_of_conduct.html.
--------------------------------------------------------------------------------
/CONTRIBUTING.md:
--------------------------------------------------------------------------------
1 | # Contributing to CardMesh
2 |
3 | First off, thanks for taking the time to contribute! 🎉👍
4 |
5 | Contributions, bug reports, and issues are very welcome. Open source is about collaboration, and we are always looking
6 | for more collaborators!
7 |
8 | ## Code of Conduct
9 |
10 | By participating in this project, you are expected to uphold
11 | our [Code of Conduct](https://github.com/CardMesh/web-app/blob/main/CODE_OF_CONDUCT.md).
12 |
13 | ## Reporting Bugs
14 |
15 | If you find a bug, please feel free to [open an issue](https://github.com/CardMesh/web-app/issues/new/choose). A good
16 | bug report has:
17 |
18 | ## Suggesting Enhancements
19 |
20 | We love to hear about new ideas! If you have a suggestion for improving the app,
21 | please [open an issue](https://github.com/CardMesh/web-app/issues/new/choose).
22 |
23 | ## Your First Code Contribution
24 |
25 | If you're not sure where to start, look for issues tagged with 'good first issue'. These are usually small bugs or
26 | enhancements that have been specifically marked as friendly to people who are new to the codebase.
27 |
28 | ## Pull Requests
29 |
30 | 1. Fork the project, clone your fork, and configure the remotes
31 | 2. Create a new topic branch (from the main branch) to contain your feature, change, or fix.
32 | 3. Commit your changes in logical chunks. Make sure your commit messages are in
33 | the [proper format](https://chris.beams.io/posts/git-commit/).
34 | 4. Push your topic branch up to your fork.
35 | 5. [Open a Pull Request](https://github.com/CardMesh/web-app/compare) with a clear title and description.
36 |
37 | ## Setting Up Your Environment
38 |
39 | 1. Clone the application
40 |
41 | git clone git@github.com:CardMesh/web-app.git && cd web-app
42 |
43 | 2. Configure your private `.env` file, following the `.env.example` sample
44 |
45 | 3. Run the app
46 |
47 | npm run dev # dev
48 |
49 | npm run build && npm run preview # dev
50 |
51 | npm run build && npm run start # prod
52 |
53 | ## Running Tests
54 |
55 | Run the tests with the following command:
56 |
57 | npm run test
58 |
59 | Please ensure that the tests all pass before you submit a Pull Request.
60 |
61 | Thank you for contributing! 🎉
62 |
--------------------------------------------------------------------------------
/Dockerfile:
--------------------------------------------------------------------------------
1 | # syntax = docker/dockerfile:1
2 |
3 | # Adjust NODE_VERSION as desired
4 | ARG NODE_VERSION=20.3.0
5 | FROM node:${NODE_VERSION}-slim AS base
6 |
7 | LABEL fly_launch_runtime="NodeJS"
8 |
9 | # NodeJS app lives here
10 | WORKDIR /app
11 |
12 | # Set production environment
13 | ENV NODE_ENV=production
14 |
15 | # Throw-away build stage to reduce size of final image
16 | FROM base AS build
17 |
18 | # Install node modules
19 | COPY --link package.json package-lock.json ./
20 | RUN npm install --production=false
21 |
22 | # Copy application code
23 | COPY --link . .
24 |
25 | # Build application
26 | RUN npm run build
27 |
28 | # Remove development dependencies
29 | RUN npm prune --production
30 |
31 | # Final stage for app image
32 | FROM base
33 |
34 | # Copy built application
35 | COPY --from=build /app /app
36 |
37 | # Rename .env.production to .env
38 | RUN mv .env.production .env
39 |
40 | # Start the server by default, this can be overwritten at runtime
41 | CMD [ "npm", "run", "start" ]
42 |
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | MIT License
2 |
3 | Copyright (c) 2023 CardMesh
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
6 |
7 | The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
8 |
9 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
10 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 |
Web app for CardMesh
2 |
3 | [](https://github.com/CardMesh/web-app/actions/workflows/ci.yml)
4 | [](https://github.com/CardMesh/web-app/graphs/contributors)
5 | [](https://github.com/CardMesh/web-app/network/members)
6 | [](https://github.com/CardMesh/web-app/stargazers)
7 | [](https://github.com/CardMesh/web-app/issues)
8 | [](https://github.com/CardMesh/web-app/blob/main/LICENSE)
9 |
10 | CardMesh is an app aimed at modernizing the sharing of business cards within a company. It displays digital business
11 | cards in a web browser, accessible via NFC tags, QR codes, or direct URLs.
12 |
13 | ### Tech Stack
14 |
15 | [](#)
16 | [](#)
17 | [](#)
18 | [](#)
19 | [](#)
20 | [](#)
21 | [](#)
22 | [](#)
23 | [](#)
24 | [](#)
25 |
26 | ### Versions & Dependencies
27 |
28 | | Version | Documentation |
29 | |---------|---------------|
30 | | 1.0.4 | current |
31 |
32 | ### Requirements
33 |
34 | - `Node.js` >= 18.x
35 |
36 | ## Documentation
37 |
38 | ## Steps to setup
39 |
40 | **1. Clone the application**
41 |
42 | ```bash
43 | git clone git@github.com:CardMesh/web-app.git && cd web-app
44 | ```
45 |
46 | **2. Configure your private `.env` file, following the `.env.example` sample**
47 |
48 | **3. In `svelte.config.js` you can define the adapter.
49 | If you want to run this on a node server, use:**
50 |
51 | ```javascript
52 | import adapter from '@sveltejs/adapter-node';
53 | ```
54 |
55 | **4. Run the app**
56 |
57 | ```bash
58 | npm run dev # dev
59 | ```
60 |
61 | ```bash
62 | npm run build && npm run preview # dev
63 | ```
64 |
65 | ```bash
66 | npm run build && npm run start # prod
67 | ```
68 |
69 | #### Docker
70 |
71 | If you're considering deploying using docker-compose, here's a simple example. Please see `./docker-compose.yml`.
72 |
73 | ```bash
74 | docker-compose up -d
75 | ```
76 |
77 | ### Roadmap
78 |
79 | See the [open issues](https://github.com/CardMesh/web-app/issues) for a complete list of proposed
80 | features (and known issues).
81 |
82 | ### Contributing
83 |
84 | If you have a suggestion to enhance this project, kindly fork the repository and create a pull request. Alternatively,
85 | you may open an issue and tag it as "enhancement". Lastly, do not hesitate to give the project a star ⭐. Thank you for
86 | your support.
87 |
88 | #### Tools
89 |
90 | Coding standards checker:
91 |
92 | ```bash
93 | npm run lint
94 | ```
95 |
96 | Coding standards fixer:
97 |
98 | ```bash
99 | npm run format
100 | ```
101 |
102 | Unit tests:
103 |
104 | ```bash
105 | npm run test
106 | ```
107 |
108 | #### Build tools
109 |
110 | Move bootstrap to `./static`. Used when bootstrap is updated:
111 |
112 | ```bash
113 | npm run build:bootstrap
114 | ```
115 |
116 | Build all favicons:
117 |
118 | ```bash
119 | npm run build:favicons
120 | ```
121 |
122 | ### License
123 |
124 | The distribution of the package operates under the `MIT License`. Further information can be found in the LICENSE file.
125 |
126 | ### DISCLAIMER: USE OF THIS GITHUB REPOSITORY
127 |
128 | By accessing and using this GitHub repository ("Repository"), you agree to the following terms and conditions. If you do
129 | not agree with any of these terms, please refrain from using the Repository.
130 |
131 | 1) No Warranty or Liability:
132 | The Repository is provided on an "as is" basis, without any warranties or representations of any kind, either
133 | expressed or implied. The owner(s) of the Repository ("Owner") hereby disclaim(s) any and all liability for any
134 | damages, losses, or injuries arising out of or in connection with the use, inability to use, or reliance on the
135 | Repository.
136 |
137 | 2) No Legal Advice:
138 | The content and information provided in the Repository are for informational purposes only and do not constitute
139 | legal advice. The Owner does not assume any responsibility for any actions taken or not taken based on the
140 | information provided in the Repository. For legal advice or specific inquiries, consult a qualified legal
141 | professional.
142 |
143 | 3) Intellectual Property:
144 | The Repository may contain copyrighted materials, including but not limited to code, documentation, images, and other
145 | intellectual property owned by the Owner or third parties. You may not use, copy, distribute, or modify any such
146 | materials without obtaining prior written permission from the respective copyright holder(s).
147 |
148 | 4) External Links:
149 | The Repository may include links to third-party websites or resources. The Owner does not endorse, control, or assume
150 | any responsibility for the content or practices of these third-party websites or resources. Accessing and using such
151 | links are solely at your own risk.
152 |
153 | 5) Modification of Repository:
154 | The Owner reserves the right to modify, update, or remove any content or functionality of the Repository at any time
155 | without prior notice. The Owner shall not be liable for any consequences arising from such modifications.
156 |
157 | 6) Indemnification:
158 | You agree to indemnify and hold the Owner harmless from and against any claims, damages, liabilities, costs, and
159 | expenses arising out of or in connection with your use of the Repository, including but not limited to any violation
160 | of these terms.
161 |
162 | 7) Governing Law:
163 | These terms shall be governed by and construed in accordance with the laws of the jurisdiction where the Owner is
164 | located, without regard to its conflict of law principles.
165 |
166 | By using the Repository, you acknowledge that you have read, understood, and agreed to these terms and conditions. If
167 | you do not agree with any of these terms, your sole remedy is to discontinue using the Repository.
168 |
--------------------------------------------------------------------------------
/SECURITY.md:
--------------------------------------------------------------------------------
1 | # Security Policy
2 |
3 | We appreciate your dedication to the safety of CardMesh. The security of our extension is our paramount concern, and
4 | community assistance is invaluable.
5 |
6 | # Vulnerability Reporting
7 |
8 | If you suspect a vulnerability, we encourage you to share it with us by sending an email
9 | to [@MathiasReker](https://github.com/MathiasReker) at
10 | github@reker.dk. Please refrain from publicizing the issue before we have thoroughly investigated and resolved it. Our
11 | commitment is to acknowledge your report promptly and maintain clear communication throughout the process.
12 |
13 | Thank you for your contribution in enhancing CardMesh's security!
14 |
--------------------------------------------------------------------------------
/docker-compose.yml:
--------------------------------------------------------------------------------
1 | version: '3'
2 | services:
3 | app:
4 | build:
5 | context: .
6 | dockerfile: Dockerfile
7 | env_file:
8 | - .env.production
9 | ports:
10 | - "5173:5173"
11 | environment:
12 | - NODE_ENV=production
13 | - PORT=5173
14 | - ORIGIN=http://localhost:5173
15 |
--------------------------------------------------------------------------------
/faviconDescription.json:
--------------------------------------------------------------------------------
1 | {
2 | "masterPicture": "./logo.svg",
3 | "iconsPath": "/",
4 | "design": {
5 | "ios": {
6 | "pictureAspect": "backgroundAndMargin",
7 | "backgroundColor": "#74aa9c",
8 | "margin": "28%",
9 | "assets": {
10 | "ios6AndPriorIcons": false,
11 | "ios7AndLaterIcons": false,
12 | "precomposedIcons": false,
13 | "declareOnlyDefaultIcon": true
14 | },
15 | "appName": "CardMesh"
16 | },
17 | "desktopBrowser": {
18 | "design": "background",
19 | "backgroundColor": "#74aa9c",
20 | "backgroundRadius": 0.45,
21 | "imageScale": 0.8
22 | },
23 | "windows": {
24 | "pictureAspect": "whiteSilhouette",
25 | "backgroundColor": "#74aa9c",
26 | "onConflict": "override",
27 | "assets": {
28 | "windows80Ie10Tile": false,
29 | "windows10Ie11EdgeTiles": {
30 | "small": false,
31 | "medium": true,
32 | "big": false,
33 | "rectangle": false
34 | }
35 | },
36 | "appName": "CardMesh"
37 | },
38 | "androidChrome": {
39 | "pictureAspect": "shadow",
40 | "themeColor": "#74aa9c",
41 | "manifest": {
42 | "name": "CardMesh",
43 | "display": "standalone",
44 | "orientation": "notSet",
45 | "onConflict": "override",
46 | "declared": true
47 | },
48 | "assets": {
49 | "legacyIcon": true,
50 | "lowResolutionIcons": false
51 | }
52 | },
53 | "safariPinnedTab": {
54 | "pictureAspect": "silhouette",
55 | "themeColor": "#74aa9c"
56 | }
57 | },
58 | "settings": {
59 | "compression": 5,
60 | "scalingAlgorithm": "Mitchell",
61 | "errorOnImageTooSmall": false,
62 | "readmeFile": false,
63 | "htmlCodeFile": false,
64 | "usePathAsIs": false
65 | }
66 | }
67 |
--------------------------------------------------------------------------------
/jsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "extends": "./.svelte-kit/tsconfig.json",
3 | "compilerOptions": {
4 | "allowJs": true,
5 | "checkJs": true,
6 | "esModuleInterop": true,
7 | "forceConsistentCasingInFileNames": true,
8 | "resolveJsonModule": true,
9 | "skipLibCheck": true,
10 | "sourceMap": true,
11 | "strict": true
12 | }
13 | }
14 |
--------------------------------------------------------------------------------
/logo.svg:
--------------------------------------------------------------------------------
1 |
5 |
--------------------------------------------------------------------------------
/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "cardmesh-web-app",
3 | "version": "1.0.4",
4 | "description": "CardMesh is an app aimed at modernizing the sharing of business cards within a company. It displays digital business cards in a web browser, accessible via NFC tags, QR codes, or direct URLs.",
5 | "author": "Mathias Reker",
6 | "license": "MIT",
7 | "type": "module",
8 | "repository": {
9 | "type": "git",
10 | "url": "git@github.com:CardMesh/web-app.git"
11 | },
12 | "bugs": {
13 | "url": "https://github.com/CardMesh/web-app/issues"
14 | },
15 | "homepage": "https://github.com/CardMesh/web-app",
16 | "scripts": {
17 | "start": "node build",
18 | "dev": "vite dev",
19 | "build": "vite build",
20 | "preview": "vite preview",
21 | "build:bootstrap": "cross-env mkdir -p ./static/js/ && cp ./node_modules/bootstrap/dist/js/bootstrap.bundle.min.js ./static/js/",
22 | "build:favicons": "real-favicon generate faviconDescription.json faviconData.json static/ && rm faviconData.json",
23 | "test": "playwright test",
24 | "test:unit": "vitest",
25 | "check": "svelte-kit sync && svelte-check --tsconfig ./jsconfig.json",
26 | "check:watch": "svelte-kit sync && svelte-check --tsconfig ./jsconfig.json --watch",
27 | "format": "eslint . --fix",
28 | "lint": "eslint ."
29 | },
30 | "devDependencies": {
31 | "@fontsource/fira-mono": "^5.2.6",
32 | "@neoconfetti/svelte": "^2.2.1",
33 | "@playwright/test": "^1.50.0",
34 | "@popperjs/core": "^2.11.8",
35 | "@rodneylab/svelte-social-icons": "^0.0.31",
36 | "@sveltejs/adapter-vercel": "^5.7.1",
37 | "@sveltejs/kit": "^2.20.8",
38 | "@types/cookie": "^1.0.0",
39 | "@zerodevx/svelte-toast": "^0.9.6",
40 | "bootstrap": "^5.3.3",
41 | "chart.js": "^4.4.8",
42 | "country-telephone-data": "^0.6.3",
43 | "cross-env": "^7.0.3",
44 | "eslint": "^9.28.0",
45 | "eslint-config-airbnb-base": "^15.0.0",
46 | "eslint-plugin-import": "^2.31.0",
47 | "eslint-plugin-svelte": "^3.3.3",
48 | "js-cookie": "^3.0.5",
49 | "leaflet": "^1.9.4",
50 | "moment-timezone": "^0.5.47",
51 | "qrcode-svg": "^1.1.0",
52 | "sass": "^1.86.0",
53 | "semver": "^7.7.1",
54 | "svelte": "^5.19.4",
55 | "svelte-check": "^4.1.4",
56 | "svelte-feather-icons": "^4.2.0",
57 | "svelte-icons-pack": "^3.1.3",
58 | "svelte-preprocess": "^6.0.3",
59 | "svelte-seo": "^1.6.1",
60 | "typescript": "^5.7.2",
61 | "vite": "^6.3.4",
62 | "vitest": "^3.1.3"
63 | }
64 | }
65 |
--------------------------------------------------------------------------------
/playwright.config.js:
--------------------------------------------------------------------------------
1 | /** @type {import('@playwright/test').PlaywrightTestConfig} */
2 | const config = {
3 | webServer: {
4 | command: 'npm run build && npm run preview',
5 | port: 4173,
6 | },
7 | testDir: 'tests',
8 | testMatch: /(.+\.)?(test|spec)\.[jt]s/,
9 | };
10 |
11 | export default config;
12 |
--------------------------------------------------------------------------------
/src/app.d.ts:
--------------------------------------------------------------------------------
1 | // See https://kit.svelte.dev/docs/types#app
2 | // for information about these interfaces
3 | declare global {
4 | namespace App {
5 | }
6 | }
7 |
8 | export {};
9 |
--------------------------------------------------------------------------------
/src/app.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 | %sveltekit.head%
20 |
24 |
25 |
26 |