14 |
15 |
--------------------------------------------------------------------------------
/src/pages/_faq/01-free-plan.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: Do you have a free plan?
3 | ---
4 | We do have a free plan, which is the default plan that you obtain when install the application for Slack.
5 | No credit card required is required for the free plan, but it is limited to a single user.
6 | Due to its limitations, this plan is intended for people evaluating the product.
7 | If you want to unleash the full potential of GraphMe and collaborate with your organization, please switch to a paid plan.
--------------------------------------------------------------------------------
/src/pages/_faq/02-trial.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: Do you offer a free trial?
3 | ---
4 | Yes, all of our plans come with a 14-days trial period.
5 | You need to provide your credit card to start the trial, but you will not be charged before the end of the trial period.
6 | If you cancel your subscription before the end of the trial period, you will not be charged at all.
--------------------------------------------------------------------------------
/src/pages/_faq/03-manage-subscription.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: Can I change or stop my subscription at any time?
3 | ---
4 | Yes, you are free to switch to a new plan, or cancel your existing subscription at any time.
5 | We will charge you at the pro-rata of the number of days in the current period
--------------------------------------------------------------------------------
/src/pages/_faq/04-more-than-max-users.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: What if I need more than 100 users?
3 | ---
4 | We also have an Unlimited plan with a custom pricing, for organizations that need to onboard more than 100 users on GraphMe.
5 | Please [reach out to us](mailto:hello@graphme.app), so that we can work together on a tailored solution for you.
--------------------------------------------------------------------------------
/src/pages/docs/billing.md:
--------------------------------------------------------------------------------
1 | ---
2 | layout: /src/layouts/DocsLayout.astro
3 | title: Billing and plan
4 | position: 22
5 | ---
6 |
7 | # Manage billing and plan
8 |
9 | This page explains how to manage your billing information and subscription.
10 |
11 | ## Subscribe to a paid plan
12 |
13 | By default, all new accounts come with a free plan.
14 | To collaborate with your team, you will need to subscribe to a paid plan.
15 | You can obtain the URL to the subscription page by using the following command from Slack:
16 |
17 | ```
18 | /graph billing
19 | ```
20 |
21 | Which would give the following response:
22 |
23 | 
24 |
25 | After clicking on the link, you will end up on a page that looks like the following:
26 |
27 | 
28 |
29 | After selecting the plan you are interested in, you will be redirected to a page hosted by [Stripe](https://stripe.com), our payment provider, where you will need to fill your payment information.
30 | Once validated, your plan will be provisioned in a few minutes.
31 | You will not be charged until the end of your free trial, and can cancel at any time during this trial period.
32 |
33 | ## Manage your subscription
34 |
35 | Once subscribed to a paid plan, you can switch to another plan, cancel your plan, or update your billing information at any time.
36 | You can obtain the URL to the customer portal by using the following command from Slack:
37 |
38 | ```
39 | /graph billing
40 | ```
41 |
42 | Which would give the following response:
43 |
44 | 
45 |
46 | After clicking on the link, you will end up on a page hosted by [Stripe](https://stripe.com), our payment provider, that allows you to manage your subscription.
47 |
48 | ## Limits
49 |
50 | Every plan comes with limits around three dimensions:
51 |
52 | * **Connections:** A limit in the number of connections that can be configured.
53 | Once the threshold is reached, it will not be possible to configure any new connections without first removing another one.
54 | * **Saved graphs:** A limit in the number of saved graphs that can be created.
55 | Once the threshold is reached, it will not be possible anymore to create any new saved graphs without first removing another one.
56 | * **Users:** A limit in the number of users that can interact with GraphMe.
57 | This does not apply to the console, but applies to all Slack commands (except `help`).
58 | Once the threshold is reached for a billing cycle, it will not be possible for any new user to interact with GraphMe.
59 |
60 | ## Need help?
61 |
62 | Should you encounter any issue with billing, please [reach out to us](mailto:hello@graphme.app).
--------------------------------------------------------------------------------
/src/pages/docs/connect.md:
--------------------------------------------------------------------------------
1 | ---
2 | layout: /src/layouts/DocsLayout.astro
3 | title: Connect to Grafana
4 | position: 10
5 | ---
6 |
7 | # Connect GraphMe to Grafana
8 |
9 | This page explains how to configure GraphMe to interact with your instance of Grafana.
10 |
11 | ## Open the console
12 |
13 | After installing the application for Slack, you are redirected to the console where you can configure the connection to Grafana.
14 | You can also obtain the URL to this console by using the following command from Slack:
15 |
16 | ```
17 | /graph connect
18 | ```
19 |
20 | Which would give the following response:
21 |
22 | 
23 |
24 | ## Configure the connection
25 |
26 | :::note
27 | Please note that links to the console are only valid for 15 minutes.
28 | :::
29 |
30 | The console to configure the connection to Grafana looks like the following:
31 |
32 | 
33 |
34 | There are three fields to fill in order to configure the connection to Grafana:
35 |
36 | | Field | Required | Description |
37 | |---------|----------|-------------|
38 | | Host | Yes | Base URL of the Grafana host to connect to.
39 | | API key | No | An [API key](https://grafana.com/docs/grafana/latest/administration/api-keys/) or [service account token](https://grafana.com/docs/grafana/latest/administration/service-accounts/). Only dashboards accessible by this key will be available via GraphMe. While this parameter can be omitted when connecting to a public instance, it is in practice always specified when connecting to your own private instance of Grafana |
40 | | Org ID | No | An [organization identifier](https://grafana.com/docs/grafana/latest/administration/organization-management/). Only dashboards accessible to this organization will be available via GraphMe. This is only needed if your instance of Grafana uses multiple organizations. By default, the organization identifier of the first organization is assumed. |
41 |
42 | For security reasons, the API key is never displayed in the form, even if one is actually used.
43 | Consequently, when editing a connection that requires an API key, you must provide the API key every time.
44 |
45 | ## Demo instance
46 |
47 | By default, every new team is configured with a demo instance of Grafana: https://play.grafana.org
48 | This allows new users to get started quickly.
49 | This demo instance is not maintained by GraphMe, and might be subject to some limitations (such as rate limiting).
50 |
51 | ## Grafana Renderer API
52 |
53 | GraphMe relies heavily the [image renderer plugin](https://grafana.com/docs/grafana/latest/setup-grafana/image-rendering/) to actually render graphs.
54 | This plugin must be installed in your Grafana instance in order for GraphMe to deliver graphs successfully.
55 |
56 | ## Network connectivity
57 |
58 | Your instance of Grafana should be publicly addressable in order for GraphMe to communicate with it.
59 | This is often the case when you use an instance of Grafana managed as a service, such as [Grafana Cloud](https://grafana.com/products/cloud/).
60 |
61 | :::warn
62 | Please [reach out to us](mailto:hello@graphme.app) if your instance is hosted in your private network and you wish to use GraphMe.
63 | :::
--------------------------------------------------------------------------------
/src/pages/docs/get-started.md:
--------------------------------------------------------------------------------
1 | ---
2 | layout: /src/layouts/DocsLayout.astro
3 | title: Get started
4 | position: 1
5 | ---
6 |
7 | # Get started
8 |
9 | After [installing the application for Slack](https://console.graphme.app/slack/install) in your workspace, you are ready to issue your first slash command:
10 |
11 | ```
12 | /graph me grafana-play-home:4
13 | ```
14 |
15 | After a few seconds, this should give you the following response:
16 |
17 | 
18 |
19 | ## Connect to Grafana
20 |
21 | The above graph comes from a demo instance of Grafana, which might not build what you are looking for.
22 | You can use the following slash command to connect GraphMe to Grafana:
23 |
24 | ```
25 | /graph connect
26 | ```
27 |
28 | You will find [more information about connecting to Grafana](/docs/connect) in the docs.
29 |
30 | ## Onboard your team
31 |
32 | After installing the application for Slack, you are subscribed to the free plan, which only comes with a single provisioned user.
33 | While this is great to get started quickly at no cost, you will likely want to collaborate with your team.
34 | In order to do that, you will need to subscribe to [one of our paid plans](/pricing) (*they all come with a free trial*).
35 | Our pricing model is very simple: every plan is associated to a number of provisioned users.
36 |
37 | You can use the following slash command to subscribe to a plan:
38 |
39 | ```
40 | /graph billing
41 | ```
42 |
43 | You will find [more information about managing your billing and plan](/docs/billing) in the docs.
--------------------------------------------------------------------------------
/src/pages/docs/index.md:
--------------------------------------------------------------------------------
1 | ---
2 | layout: /src/layouts/DocsLayout.astro
3 | title: Introduction
4 | position: 0
5 | ---
6 |
7 | # What is GraphMe?
8 |
9 | GraphMe is an application connecting Grafana to Slack.
10 | It allows its users to easily share graphs from Grafana dashboards in Slack channels:
11 |
12 | 
13 |
14 | If you are an engineer working with metrics and dashboards, you are certainly faced with the pain of sharing them within your internal communications system.
15 | It very likely involves finding the right dashboard and panel(s) to share, taking a screenshot of them, and uploading this screenshot into your internal communications system.
16 | Besides being time consuming, this manual process also means that context might be lost while doing so.
17 | What was the time frame being considered? Which filters were applied?
18 |
19 | GraphMe solves this pain by proposing an integration of Grafana with Slack.
20 | It comes as the form of a slash command, that is used to query dashboards without leaving Slack.
21 | Dashboards are then shared in Slack with all their context, and a link to open it in Grafana to continue the analysis there, if needed.
22 |
23 | GraphMe also offers the option to create aliases of common dashboard queries.
24 | For example, one could create an alias `weekly-report` that targets the panels used specifically to build that weekly report.
25 | This is also a tremendous tool to share knowledge across a team, and creates a source of truth of how key metrics and reports and assembled.
26 |
27 | ## Inspiration and credits
28 |
29 | We proudly recognize that GraphMe was inspired by talks given by GitHub folks about their internal chatops system, nicknamed [Hubot](https://hubot.github.com/).
30 | Hubot comes with integrations with many internal systems used at GitHub, not limited to engineering but also used by sales and marketing.
31 | One of those commands is `graph me`, an integration to their internal graphing system (Graphite at the beginning, and later Datadog), which gave the name to this application.
32 |
33 | This graphing command has been [implemented](https://github.com/stephenyeargin/hubot-grafana) [several](https://github.com/github/hubot-scripts/blob/master/src/scripts/graphite.coffee) [times](https://github.com/rick/hubot-graphme) under the form of open source plugins to Hubot, most of them being now inactive.
34 | We took as a basis the familiar syntax proposed by [hubot-grafana](https://github.com/stephenyeargin/hubot-grafana), and implemented it as a service ready to be used, with no installation.
--------------------------------------------------------------------------------
/src/pages/docs/share.md:
--------------------------------------------------------------------------------
1 | ---
2 | layout: /src/layouts/DocsLayout.astro
3 | title: Share dashboards
4 | position: 11
5 | ---
6 |
7 | # Share Grafana dashboards in Slack
8 |
9 | This page explains the different ways to share Grafana dashboards from Slack.
10 |
11 | ## Share dashboards and panels
12 |
13 | Dashboards and panels can be shared with the following command:
14 |
15 | ```
16 | /graph me : [[ [ ]]]
17 | ```
18 |
19 | For example:
20 |
21 | ```
22 | /graph me grafana-play-home:4
23 | ```
24 |
25 | Which would give the following response:
26 |
27 | 
28 |
29 | The following table lists the syntaxes available to query dashboards and panels:
30 |
31 | | Syntax | Description | Example |
32 | |--------|-------------|---------|
33 | | `` | Returns all panels of the dashboard identified by its slug (max: 6 panels). | `grafana-play-home` |
34 | | `` | Returns all panels of the dashboard identified by its UID (max: 6 panels). | `000000012` |
35 | | `:` | Retrieve a single panel of a dashboard by its visual position in the dashboard. Panel 1 is the top-left panel, then from left to right, and top to bottom. | `grafana-play-home:4` |
36 | | `:$` | Retrieve a single panel of a dashboard by its unique identifier. | `grafana-play-home:$2` |
37 | | `:` | Retrieve all panels of a dashboard matching a keyword (max: 6 panels). A single keyword can be provided, and it must be present in the panel's title for the latter to be considered. | `grafana-play-home:$2` |
38 |
39 | After the query may optionally come some options.
40 | Options can be parameters, and a specification of the time range.
41 |
42 | Parameters are specified as a list of key/value pairs (e.g., `key=value`), and are mapped to [variables](https://grafana.com/docs/grafana/latest/dashboards/variables/).
43 | There are also a few special parameters that have their own special meaning:
44 |
45 | | Parameter | Default | Description |
46 | |-----------|---------|-------------|
47 | | width | 1000 | Width of the graph to render in pixels |
48 | | height | 500 | Height of the graph to render in pixels |
49 | | tz | UTC | Timezone to use to interpret the time range, and to render the graph |
50 |
51 | Along with those parameters can also be provided a time range.
52 | While parameters are key/value pairs, time range is provided as a plain value.
53 | If a single plain value is provided, it will be the start time.
54 | By default, start time is 6 hours ago, and end time is the time at which the query is issued.
55 | The following formats are supported to specify time:
56 |
57 | | Format | Description | Example |
58 | |--------|-------------|---------|
59 | | timestamp | Unix timestamp, in seconds | 1678795803 |
60 | | "now" | Time at which the query is issued | now |
61 | | -Nyears | A time that is N years in the past from now | -1years |
62 | | -Nweeks | A time that is N weeks in the past from now | -2weeks |
63 | | -Ndays | A time that is N days in the past from now | -12hours |
64 | | -Nhours | A time that is N hours in the past from now | -5days |
65 | | -Nminutes | A time that is N minutes in the past from now | -15minutes |
66 | | -Nseconds | A time that is N seconds in the past from now | -30seconds |
67 | | Y-m-d | Year/month/day | 2023-03-14 |
68 | | Y-m-dTH:M | Year/month/day and hour/minute | 2023-03-14T13:10 |
69 | | Y-m-dTH:M:s | Year/month/day and hour/minute/second | 2023-03-14T13:10:03 |
70 |
71 | Relative time period (e.g., "-12hours") can also be prefixed by "now" (e.g., "now-12hours") to match Grafana's syntax.
72 | Time period quantifiers (e.g., "hours", "days") can also be specified in singular (e.g., "hour", "day"), or abbreviated as their first char (e.g., "h", "d").
73 |
74 | Here is an example of a complex query involving parameters and time range:
75 |
76 | ```
77 | /graph me influxdb-server-monitoring:3 host=server1 summarize=1h -1d -12h
78 | ```
79 |
80 | ## Create and reuse saved graphs
81 |
82 | Graphs that are often queried can be saved under an alias for an easier access.
83 | We call them **saved graphs**.
84 | The latest graph that has been shared in the channel by the current user can be saved with the following command:
85 |
86 | ```
87 | /graph save as
88 | ```
89 |
90 | For example:
91 |
92 | ```
93 | /graph save as cpu
94 | ```
95 |
96 | Which would give the following response:
97 |
98 | 
99 |
100 | It can then be invoked with the following command:
101 |
102 | ```
103 | /graph me cpu
104 | ```
105 |
106 | All the usual options of the `/graph me` command can still be used.
107 | If an option was part of the saved graph, it will be overridden.
108 | For example:
109 |
110 | ```
111 | /graph me cpu -7d -2d host=app1
112 | ```
113 |
114 | By default, a saved graph cannot be overridden, unless you use the `save!` command:
115 |
116 | ```
117 | /graph save! as cpu
118 | ```
119 |
120 | If a saved graph is not useful anymore, it can be deleted with the following command:
121 |
122 | ```
123 | /graph forget
124 | ```
125 |
126 | For example:
127 |
128 | ```
129 | /graph forget cpu
130 | ```
131 |
132 | Which would give the following response:
133 |
134 | 
135 |
136 | ## Search for dashboards and graphs
137 |
138 | Dashboards and panels can be searched with the following command:
139 |
140 | ```
141 | /graph search
142 | ```
143 |
144 | For example:
145 |
146 | ```
147 | /graph search server
148 | ```
149 |
150 | Which would give the following response:
151 |
152 | 
153 |
154 | This command returns all dashboards (max: 50 dashboards) matching the given keyword.
155 | It also returns all saved graphs (max: 50 graphs) matching the given keyword.
156 | Finally, if less than 50 graphs were returned, it also returns graphs that are associated with one of the dashboards that matched the query.
--------------------------------------------------------------------------------
/src/pages/docs/slack.md:
--------------------------------------------------------------------------------
1 | ---
2 | layout: /src/layouts/DocsLayout.astro
3 | title: Manage the application
4 | position: 21
5 | ---
6 |
7 | # Manage the application for Slack
8 |
9 | This page explains how to install, uninstall or change settings related to our applicatin for Slack.
10 | In order to follow those instructions, you will need the permission to add an application to your workspace.
11 |
12 | ## Install the application
13 |
14 | Our application for Slack can be installed from our "Add to Slack" button:
15 |
16 | [](https://console.graphme.app/slack/install)
17 |
18 | Clicking on the button will redirect you to a screen that will ask you to accept some permissions required to make the application to work.
19 | If you need to better understand how we use those permissions, please refer to [the dedicated section](#permissions).
20 | After confirming, you will be redirected back to the console, and the application should be available in your workspace!
21 |
22 | [Slack's documentation](https://slack.com/help/articles/202035138-Add-apps-to-your-Slack-workspace) contains more information about adding apps to a workspace.
23 |
24 | ## Re-install the application
25 |
26 | Re-installing the application is harmless, but is usually not needed.
27 | The only cases where it should be attempted is when instructed to do so by the application itself of by the support.
28 |
29 | Our application for Slack can be re-installed by using the same "Add to Slack" button than above.
30 | Clicking on the button will trigger the same flow as for a regular installation.
31 |
32 | ## Uninstall the application
33 |
34 | To uninstall the application, first access the application's home in Slack (e.g., by searching for "GraphMe" in the search bar).
35 | Then go to the "About" tab, and click on the "Configuration" button.
36 | You will end up on a page allowing you to configure the installation of the application for Slack.
37 |
38 | Lower in the page, there is an option to remove the application from your workspace:
39 |
40 | 
41 |
42 | ## Change the bot's name
43 |
44 | By default, the bot is named @graphme, but this can be changed.
45 | To rename the bot, first access the application's home in Slack (e.g., by searching for "GraphMe" in the search bar).
46 | Then go to the "About" tab, and click on the "Configuration" button.
47 | You will end up on a page allowing you to configure the installation of the application for Slack.
48 |
49 | Lower in the page, there is an option to rename the bot user associated with the application:
50 |
51 | 
52 |
53 | ## Required permissions
54 |
55 | GraphMe's application for Slack asks for the minimal set of permissions required to make it behave correctly:
56 |
57 | * **View information about your identity:**
58 | This is the minimal permission needed when installing an application.
59 | This does *not* give us access to your email address.
60 | * **Add shortcuts and/or slash commands that people can use:**
61 | The primary way of interacting with GraphMe is via slash commands.
62 | This permission is needed in order to install the `/graph` command inside your workspace.
63 | This also allows GraphMe from being notified whenever somebody uses a slash command, and to react to it.
64 |
--------------------------------------------------------------------------------
/src/pages/index.astro:
--------------------------------------------------------------------------------
1 | ---
2 | import Layout from '../layouts/Layout.astro';
3 | import Hero from '../components/Hero.astro';
4 | import Features from '../components/Features.astro';
5 | ---
6 |
7 |
8 |
9 |
10 |
18 |
19 |
20 |
--------------------------------------------------------------------------------
/src/pages/pricing.astro:
--------------------------------------------------------------------------------
1 | ---
2 | import Layout from '../layouts/Layout.astro';
3 | import Faq from '../components/Faq.astro';
4 |
5 | const plans = [
6 | {
7 | "name": "Team",
8 | "price": 25,
9 | "features": [
10 | "25 users",
11 | "Unlimited usage",
12 | ],
13 | },
14 | {
15 | "name": "Company",
16 | "price": 50,
17 | "features": [
18 | "50 users",
19 | "Unlimited usage",
20 | ],
21 | },
22 | {
23 | "name": "Enterprise",
24 | "price": 100,
25 | "features": [
26 | "100 users",
27 | "Unlimited usage",
28 | ],
29 | }
30 | ];
31 |
32 | ---
33 |
34 |
35 |
36 |
37 |
38 |
39 | Designed for teams of all sizes
40 |
41 |
42 | A clear and simple pricing, based on the number of allocated seats.
43 |
76 |
77 |
78 |
--------------------------------------------------------------------------------
/src/pages/privacy.md:
--------------------------------------------------------------------------------
1 | ---
2 | layout: /src/layouts/PageLayout.astro
3 | title: Privacy policy
4 | ---
5 |
6 | # Privacy policy
7 |
8 | :::note
9 | Last updated: March 2023
10 | :::
11 |
12 | This privacy policy explains which data we collect about you and how we use it.
13 | It also explains your rights about this data and how to exercise them.
14 | By using our service, you accept this privacy policy.
15 | If you are in disagreement with it, please do not use our service and contact us to get your data deleted.
16 |
17 | ## Preamble
18 |
19 | When designing GraphMe, we took privacy very seriously from the beginning.
20 | No company wants to risk compromising information by sharing it with a third party service that is spying on it.
21 | That is why we collect only the very minimal amount of information needed to keep the product running, and nothing more.
22 | You are not the product, GraphMe is!
23 |
24 | ## Which data we collect
25 |
26 | **Account information:**
27 | When you install the application, we get access to your identity and the identity of the workspace the application has been installed in.
28 | When you subscribe to a plan, we get access to billing information (name, email address, billing address).
29 | Account information is stored until your account is closed.
30 | Billing information may be stored undefinitely when necessary for regulatory or compliance purposes.
31 |
32 | **Content submitted through our service:**
33 | When using our service, you voluntarily store content into it, such as connection information, queries and graphs.
34 | It can be via our Web console or via the application for Slack.
35 | Interactions from users may also result in some content being generated, such as graphs.
36 | We keep track of every command that was sent to our service.
37 | It includes metadata such as the user ID, channel ID and command issued.
38 | Content submitted through our service is stored until you voluntarily choose to delete it (when applicable), or until your account is closed.
39 |
40 | **Information from Slack:**
41 | Our service listens to some events from Slack.
42 | This includes reactions to commands, interactivity that result from it, and lifecycle of the application for Slack.
43 | When you install the application for Slack, you are redirected to Slack where you have to give your consent for us to access this data.
44 | The token associated with your installation of GraphMe is stored until you uninstall the application, or until your account is closed.
45 | Other information obtained from Slack is processed in-memory and not persisted.
46 |
47 | **Information from Grafana:**
48 | When a request is sent to the instance of Grafana you configured, we access information such as configured dashboards and their panels.
49 | While we have access to data stored in Grafana, we do not process any personal information that might be stored there.
50 | Information obtained from Grafana is processed in-memory and not persisted.
51 |
52 | **Website statistics:**
53 | Our websites contain a privacy-preserving tracking code.
54 | We collect data about which pages are visited, referrals, entry and exit pages, time spent, device type, browser type and country.
55 | It does not rely on any cookies to collect data, meaning individual users are not tracked.
56 | Website statistics are anonymous and may be stored undefinitely.
57 |
58 | **Logs and metrics:**
59 | We collect technical data about every interaction with our service.
60 | This may include your operating system, device type, browser type, IP address, time of access, loading time, HTTP status code and crash reports.
61 | Logs and metrics may be stored up to one year.
62 |
63 | ## How we use collected data
64 |
65 | **To provide the service:**
66 | First and foremost, we use aforementioned collected data to provide you with a service.
67 |
68 | **To communicate with you about the service:**
69 | We may use collected data to send you emails or Slack messages about your service usage.
70 | For example, we may send you notifications when you reached a quota, or if your payment was declined.
71 |
72 | **For research and development:**
73 | We may use collected data for analytics purposes.
74 | This allows us to better understand how you use our service, and to improve it.
75 |
76 | **To protect our legitimate business interests and legal rights:**
77 | Where required by law or where we believe it is necessary to protect our legal rights, interests and the interests of others, we use information about you in connection with legal claims, compliance, regulatory, and audit functions, and disclosures in connection with the acquisition, merger or sale of a business.
78 |
79 | ## How we share collected information
80 |
81 | We share collected information with a restricted set of third party services, also known as sub-processors.
82 |
83 | **Fathom:**
84 | Fathom is our privacy-preserving website analytics provider.
85 | They have access to website statistics.
86 | Please refer to [Fathom's Privacy Policy](https://usefathom.com/privacy) to learn more about how they process data.
87 |
88 | **Cloudflare:**
89 | Cloudflare is our CDN (Content Delivery Network) provider.
90 | Every request to our app goes through Cloudflare first.
91 | They have access to access logs.
92 |
93 | Cloudflare is also our blob storage provider.
94 | They have access to rendered graphs.
95 | Please refer to [Cloudflare's Privacy Policy](https://www.cloudflare.com/en-gb/privacypolicy/) to learn more about how they process data.
96 |
97 | **Slack:**
98 | Slack is the platform with which you interact with GraphMe.
99 | They have access to your interactions with our service.
100 | Please refer to [Slack's Privacy Policy](https://slack.com/trust/privacy/privacy-policy) to learn more about how they process data.
101 |
102 | **Stripe:**
103 | Stripe is our payment provider.
104 | They have access to payment information.
105 | Please refer to [Stripe's Privacy Policy](https://stripe.com/fr/privacy) to learn more about how they process data.
106 |
107 | **Sentry:**
108 | Sentry is our error tracking system.
109 | They have access to errors that may happen when you use our service.
110 | Please refer to [Stripe's Privacy Policy](https://sentry.io/privacy/) to learn more about how they process data.
111 |
112 | **Logtail:**
113 | Logtail is our logging system.
114 | They have access to various logs such as access logs and system logs.
115 | Please refer to [Logtail's Privacy Policy](https://betterstack.com/privacy) to learn more about how they process data.
116 |
117 | **Grafana Cloud:**
118 | Grafana Cloud is our observability system.
119 | They have access to access metrics and usage statistics.
120 | Please refer to [Grafana's Privacy Policy](https://grafana.com/legal/privacy-policy/) to learn more about how they process data.
121 |
122 | ## Your rights
123 |
124 | We follow the GDPR framework, which gives you the following rights.
125 |
126 | ### The right to be informed
127 |
128 | You have the right to be informed about how we collect and use your personal data.
129 | This is the purpose of this privacy policy.
130 |
131 | ### The right of access
132 |
133 | You have the right to receive a copy of personal data we collected about you.
134 |
135 | ### The right to rectification
136 |
137 | You have the right to correct your personal data if it is incorrect.
138 |
139 | ### The right to erasure
140 |
141 | You have the right to get your personal data deleted.
142 | This is not an absolute right, there are exceptions that may prevent us from completing such as request.
143 |
144 | ### The right to restrict processing
145 |
146 | Alternatively to removing your personal data, you have the right to restrict how we use it.
147 | We will still store your personal data, but stop processing it.
148 | This is not an absolute right, there are exceptions that may prevent us from completing such as request.
149 |
150 | ### The right to data portability
151 |
152 | You have the right to export your personal data in a machine readable format, and reuse it for your own purpose in a different service.
153 |
154 | ### The right to object
155 |
156 | You have the right to object the processing of your personal data.
157 | In particular, you have the right to object your personal data being used for marketing purposes.
158 |
159 | ## Request data deletion
160 |
161 | Regardless of whether you are subject to the GDPR, you can always request your data to be deleted by reaching out to us at hello@graphme.app
162 |
163 | ## Changes to our privacy policy
164 |
165 | We may change this privacy policy from time to time.
166 | In case of a significant change, we will notify you by email or Slack.
167 | We recommend anyway that you periodically review this privacy policy.
168 |
169 | ## Contact us
170 |
171 | If you have questions or concerns, or wish to exercise your data rights, including data deletion, please contact us at hello@graphme.app
--------------------------------------------------------------------------------
/src/pages/support.md:
--------------------------------------------------------------------------------
1 | ---
2 | layout: /src/layouts/PageLayout.astro
3 | title: Support
4 | ---
5 |
6 | # Support
7 |
8 | We offer support for all customers, both on paid and non-paid plans via email.
9 |
10 | Please contact us at hello@graphme.app for any support request.
--------------------------------------------------------------------------------
/src/pages/terms.md:
--------------------------------------------------------------------------------
1 | ---
2 | layout: /src/layouts/PageLayout.astro
3 | title: Terms of service
4 | ---
5 |
6 | # Terms of service
7 |
8 | :::note
9 | Last updated: March 2023
10 | :::
11 |
12 | ## Use of the service
13 |
14 | To use the service, you need to create an account using your Slack identity.
15 | By using our service, you accept those terms.
16 |
17 | The Free plan is offered free of charge, no credit card required.
18 | You can also upgrade to one of our paid plans at any time.
19 | Until you cancel your subscription, the latter will renewed automatically for the next billing period, and your credit card charged.
20 | If you are unable to access our application, you may cancel your subscription by contacting us.
21 | In case we cannot collect your payment, your subscription will be cancelled.
22 |
23 | Access to the service is permitted on a temporary basis.
24 | We reserve the right to modify or discontinue offering or updating the service at any time without notice.
25 |
26 | ## Account termination
27 |
28 | Your account may be terminated at any time if:
29 | * you breach the agreement formed by those terms of services.
30 | * we consider it necessary to protect the integrity of our service.
31 |
32 | In such a situation, we will notify you by email or Slack.
33 |
34 | ## Liability
35 |
36 | To the maximum extent permitted by law, the service is provided on an "as is" and "as available" basis.
37 | We make no warranties, may it be expressed or implied, therefore negates all other warranties.
38 | We are not responsible for any delays, delivery failures, service unavailability, or any loss or damage resulting from your usage of our service.
39 | You understand that you are using the service at your own discretion and risk.
40 |
41 | ## Limitations
42 |
43 | We will not be hold accountable for any damages that will arise with the use or inability to use our service, even if an authorized representative has been notified, orally or written, of the possibility of such damage.
44 |
45 | ## Privacy
46 |
47 | We process your personal information in accordance with [our privacy policy](/privacy).
48 |
49 | ## Changes to our terms of service
50 |
51 | We may change those terms of service from time to time.
52 | In case of a significant change, we will notify you by email or Slack.
53 | We recommend anyway that you periodically review those terms of service.
54 |
55 | ## Governing law
56 |
57 | Any claim related to our service shall be governed by the French law.
58 |
59 | ## Contact us
60 |
61 | If you have questions or concerns, please contact us at hello@graphme.app
--------------------------------------------------------------------------------
/src/styles/global.css:
--------------------------------------------------------------------------------
1 | @tailwind base;
2 | @tailwind components;
3 | @tailwind utilities;
4 |
5 | @layer base {
6 | @font-face {
7 | font-family: 'Mona Sans';
8 | src:
9 | url('/fonts/Mona-Sans.woff2') format('woff2 supports variations'),
10 | url('/fonts/Mona-Sans.woff2') format('woff2-variations');
11 | font-weight: 200 900;
12 | font-stretch: 75% 125%;
13 | }
14 |
15 | @font-face {
16 | font-family: 'Hubot Sans';
17 | src:
18 | url('/fonts/Hubot-Sans.woff2') format('woff2 supports variations'),
19 | url('/fonts/Hubot-Sans.woff2') format('woff2-variations');
20 | font-weight: 200 900;
21 | font-stretch: 75% 125%;
22 | }
23 | }
24 |
25 | /* https://github.com/Microflash/remark-callout-directives */
26 | .callout {
27 | @apply px-4 mb-2 flex items-center border-t-4;
28 | }
29 |
30 | .callout-title {
31 | @apply hidden;
32 | }
33 |
34 | .callout-content {
35 | @apply ml-2;
36 | }
37 |
38 | .callout-assert {
39 | @apply text-blue-700 bg-blue-100;
40 | }
41 |
42 | .callout-warn {
43 | @apply text-yellow-700 bg-yellow-100 border-yellow-500;
44 | }
45 |
46 | .callout-deter {
47 | @apply text-red-700 bg-red-100 border-red-500;
48 | }
49 |
50 | .callout-commend {
51 | @apply text-green-700 bg-green-100 border-green-500;
52 | }
53 |
54 | .callout-assert {
55 | @apply text-blue-700 bg-blue-100 border-blue-500;
56 | }
57 |
58 | .callout-note {
59 | @apply text-gray-700 bg-gray-100 border-gray-500 ;
60 | }
--------------------------------------------------------------------------------
/tailwind.config.cjs:
--------------------------------------------------------------------------------
1 | const defaultTheme = require('tailwindcss/defaultTheme')
2 |
3 | /** @type {import('tailwindcss').Config} */
4 | module.exports = {
5 | content: ['./src/**/*.{astro,html,js,jsx,md,mdx,ts,tsx}'],
6 | theme: {
7 | fontFamily: {
8 | 'sans': ['Mona Sans', ...defaultTheme.fontFamily.sans],
9 | },
10 | extend: {
11 | colors: {
12 | aubergine: "rgb(63,14,64)",
13 | // Generated from https://uicolors.app/create
14 | primary: {
15 | '50': '#ebf1ff',
16 | '100': '#dbe5ff',
17 | '200': '#beceff',
18 | '300': '#96aeff',
19 | '400': '#6d81ff',
20 | '500': '#4b56ff',
21 | '600': '#2f2bff',
22 | '700': '#271fe3',
23 | '800': '#201db6',
24 | '900': '#191970',
25 | },
26 | },
27 | },
28 | },
29 | plugins: [
30 | require('@tailwindcss/typography'),
31 | ],
32 | }
33 |
--------------------------------------------------------------------------------
/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "extends": "astro/tsconfigs/strict",
3 | "compilerOptions": {
4 | "jsx": "react-jsx",
5 | "jsxImportSource": "react"
6 | }
7 | }
--------------------------------------------------------------------------------