Skip to content

Commit c45cac2

Browse files
Merge branch 'main' into plc-landing
2 parents c8743ad + 3b24148 commit c45cac2

59 files changed

Lines changed: 6471 additions & 2269 deletions

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

.github/workflows/calibreapp-image-actions.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ jobs:
1919
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
2020
- name: Compress Images
2121
id: calibre
22-
uses: calibreapp/image-actions@f32575787d333b0579f0b7d506ff03be63a669d1 # 1.4.1
22+
uses: calibreapp/image-actions@9d037c06280028c110ff61c433ad4dc7d33c3c43 # 1.5.0
2323
with:
2424
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
2525
# For non-Pull Requests, run in compressOnly mode and we'll PR after.

.github/workflows/sast-scan.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,4 +16,4 @@ concurrency:
1616
jobs:
1717
scan:
1818
name: SAST Scan
19-
uses : flowfuse/github-actions-workflows/.github/workflows/sast_scan.yaml@v0.76.0
19+
uses: flowfuse/github-actions-workflows/.github/workflows/sast_scan.yaml@sast_scan/v1

.github/workflows/test.yml

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -49,8 +49,5 @@ jobs:
4949
run: npm install
5050
working-directory: 'website'
5151
- name: Build the forge
52-
run: npm run build:skip-images
52+
run: npm run build:nuxt:skip-images
5353
working-directory: 'website'
54-
- uses: untitaker/hyperlink@fb5bb9c5011a3d143a54b4b30aedc30ec5bc0f89 # 0.2.0
55-
with:
56-
args: website/_site/ --check-anchors --sources website/src

nuxt/.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,3 +8,4 @@ public/
88

99
# Dependencies (hoisted to workspace root)
1010
node_modules/
11+
.data/

nuxt/components/AppHeader.vue

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -74,7 +74,7 @@ onMounted(() => {
7474
<nav class="relative w-full flex items-center justify-between mx-auto max-screen-none lg:max-w-screen-xl 2xl:max-w-[1920px]">
7575

7676
<!-- Wordmark: visible on mobile + desktop, hidden on tablet -->
77-
<a class="flex md:hidden lg:flex no-underline hover:no-underline font-bold h-8 w-40 flex-row" href="/" style="font-family:'Baloo 2', sans-serif">
77+
<a class="flex md:hidden lg:flex no-underline hover:no-underline font-bold h-8 w-40 flex-row" href="/" aria-label="FlowFuse Home" style="font-family:'Baloo 2', sans-serif">
7878
<svg class="h-full w-full" viewBox="0 0 402 70" xmlns="http://www.w3.org/2000/svg">
7979
<mask id="wm-mask0" style="mask-type:luminance" maskUnits="userSpaceOnUse" x="0" y="0" width="402" height="70">
8080
<path d="M402 0H0V70H402V0Z" fill="white" />
@@ -102,7 +102,7 @@ onMounted(() => {
102102
</a>
103103

104104
<!-- Square icon: visible on tablet only -->
105-
<a class="w-8 h-8 hidden md:block lg:hidden shrink-0" href="/">
105+
<a class="w-8 h-8 hidden md:block lg:hidden shrink-0" href="/" aria-label="FlowFuse Home">
106106
<svg enable-background="new 0 0 79.4 79.4" viewBox="0 0 79.4 79.4" xmlns="http://www.w3.org/2000/svg">
107107
<path fill-rule="evenodd" clip-rule="evenodd" d="M6.28751 0H73.5639C77.022 0 79.8514 2.83457 79.8514 6.29905V25.5112C70.4201 25.1962 60.9888 27.4009 52.1863 31.1803C49.3488 32.2807 46.5646 33.5413 43.7871 34.7989C37.0251 37.8605 30.3032 40.904 22.9494 41.5737C17.2809 42.047 11.435 41.9869 5.67825 41.9277C3.77251 41.9082 1.87653 41.8887 0 41.8887V6.29905C0 2.83457 2.82938 0 6.28751 0ZM44.0131 48.1865C45.9468 49.0061 47.863 49.861 49.7741 50.7136L49.7742 50.7136C55.9409 53.4649 62.0544 56.1924 68.5343 57.635C72.3069 58.2649 76.0794 58.5799 79.8519 58.5799V37.793H76.7081C67.2021 37.793 58.326 41.7897 49.7365 45.6572L49.7363 45.6573C47.8155 46.5222 45.909 47.3806 44.0131 48.1865ZM19.8057 54.8032C16.0332 54.4883 12.2606 54.4883 8.48814 54.4883H0V73.7004C0 77.1649 2.82938 79.9994 6.28751 79.9994H73.8782C77.3364 79.9994 80.1657 77.1649 80.1657 73.7004V71.1808C71.992 71.1808 63.5038 70.2359 55.9588 67.0864C51.7804 65.691 47.7481 63.8567 43.7373 62.0322L43.7373 62.0322C35.9794 58.5031 28.3023 55.0108 19.8057 54.8032Z" fill="#ED4E4E"/>
108108
<path d="M79.8514 37.7939V25.1958C70.4201 24.8808 60.9888 27.0855 52.1863 30.8649C42.4407 34.6444 33.3238 40.3135 22.9494 41.2584C15.4044 41.8883 7.54501 41.5733 0 41.5733V54.4864H8.48814C12.2606 54.4864 16.0331 54.4864 19.8057 54.8013C32.695 55.1163 43.6982 62.9901 55.6445 67.0845C63.1895 70.234 71.6776 71.1789 79.8514 71.1789V58.5807C76.0789 58.5807 72.3064 58.2658 68.5338 57.6359C60.0457 55.7462 52.1863 51.6518 44.0126 48.1873C54.387 43.778 65.0757 37.7939 76.7076 37.7939H79.8514Z" fill="white"/>

nuxt/content.config.ts

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
import { defineContentConfig, defineCollection } from '@nuxt/content'
2+
3+
export default defineContentConfig({
4+
collections: {
5+
pages: defineCollection({
6+
type: 'page',
7+
source: '*.md'
8+
})
9+
}
10+
})

nuxt/content/privacy-policy.md

Lines changed: 125 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,125 @@
1+
# Privacy Policy
2+
3+
This Privacy Policy describes the privacy practices of FlowFuse Inc (**"FlowFuse"**, **"we"**, **"us"** or **"our"**) and how we handle personal information that we collect through our digital properties that link to this Privacy Policy, including our website, (the **"Service"**), as well as through social media, our marketing activities, our events and other activities described in this policy.
4+
5+
At the time we collect personal information, we may provide additional or supplemental privacy notices to individuals for specific services and personal information processing activities.
6+
7+
Our Service is designed for businesses and their representatives. We do not offer products or services for use by individuals for their personal, family or household purposes. Accordingly, we treat all personal information we collect as pertaining to individuals in their capacities as business representatives and not their individual capacities.
8+
9+
## Index
10+
11+
- [Personal information we collect](#personal-information-we-collect)
12+
- [How we use your personal information](#how-we-use-your-personal-information)
13+
- [How we share your personal information](#how-we-share-your-personal-information)
14+
- [Your choices](#your-choices)
15+
- [Other sites and services](#other-sites-and-services)
16+
- [Security](#security)
17+
- [International data transfer](#international-data-transfer)
18+
- [Children](#children)
19+
- [Changes to this Privacy Policy](#changes-to-this-privacy-policy)
20+
- [How to contact us](#how-to-contact-us)
21+
22+
## Personal information we collect
23+
24+
**Information you provide to us.** Personal information you may provide to us through the Service or otherwise, such as when you view our website or contact us includes:
25+
26+
- **Contact data**, such as your first and last name, email address, mailing address, professional title and company name, and phone number.
27+
- **Communications data**, based on our exchanges with you, including when you contact us with questions or feedback, through the Service, social media, or otherwise.
28+
- **Marketing data**, such as your preferences for receiving our marketing communications and details about your engagement with them.
29+
- **Job application data**, such as professional credentials, skills, educational and work history, personal website, immigration status, criminal history, information that may be included on a resume or curriculum vitae as well as in a cover letter, and any other information you may otherwise provide us through a job application or interview. This may also include diversity information.
30+
- **Other data** not specifically listed here, which we will use as described in this Privacy Policy or as otherwise disclosed at the time of collection.
31+
32+
**Third-party sources.** We may combine personal information we receive from you with personal information we obtain from other sources, such as:
33+
34+
- **Public sources**, such as public records and other publicly available sources.
35+
- **Private sources**, such as data providers and data licensors that may provide demographic and other information as well as social media platforms.
36+
37+
**Automatic data collection.** We, our service providers, and our business partners may automatically log information about you, your computer or mobile device, and your interaction over time with the Service, our communications and other online services, such as:
38+
39+
- **Device data**, such as your computer's or mobile device's operating system type and version, manufacturer and model, browser type, screen resolution, RAM and disk size, CPU usage, device type (e.g., phone, tablet), IP address, unique identifiers, language settings, mobile device carrier, radio/network information (e.g., Wi-Fi, LTE, 3G), and general location information such as city, state or geographic area.
40+
- **Online activity data**, such as pages or screens you viewed, how long you spent on a page or screen, the website you visited before browsing to the Service, navigation paths between pages or screens, information about your activity on a page or screen, access times and duration of access, and whether you have opened our marketing emails or clicked links within them.
41+
42+
**Cookies and similar technologies.** Like many online services, we, our service providers, and our business partners may use the following technologies:
43+
44+
- **Cookies**, which are text files that websites store on a visitor's device to uniquely identify the visitor's browser or to store information or settings in the browser for the purpose of helping you navigate between pages efficiently, remembering your preferences, enabling functionality, helping us understand user activity and patterns, and facilitating analytics.
45+
- **Web beacons**, also known as pixel tags or clear GIFs, which are used to demonstrate that a webpage or email was accessed or opened, or that certain content was viewed or clicked.
46+
47+
**Data about others.** Users of the Service may have the opportunity to refer friends or other contacts to us and share their contact information with us. Please do not refer someone to us or share their contact information with us unless you have their permission to do so.
48+
49+
## How we use your personal information
50+
51+
We may use your personal information for the following purposes or as otherwise described at the time of collection:
52+
53+
**Service delivery.** We may use your personal information to:
54+
55+
- provide, operate and improve the Service and our business, including researching prospective and current portfolio companies and financing them;
56+
- communicate with you about the Service, including by sending announcements, updates, security alerts, and support and administrative messages;
57+
- understand your needs and interests, and personalize your experience with the Service and our communications; and
58+
- provide support for the Service, and respond to your requests, questions and feedback.
59+
60+
**Research and development.** We may use your personal information for research and development purposes, including to analyze and improve the Service and our business. As part of these activities, we may create aggregated, de-identified or other anonymous data from personal information we collect. We make personal information into anonymous data by removing information that makes the data personally identifiable to you. We may use this anonymous data and share it with third parties for our lawful business purposes, including to analyze and improve the Service and promote our business.
61+
62+
**Marketing.** We and our service providers may collect and use your personal information for marketing purposes. We may send you Open Core Ventures-related marketing communications as permitted by law. You may opt-out of our marketing communications as described in the [Opt-out of marketing](#your-choices) section below.
63+
64+
**To manage our and other's recruiting and process employment applications.** We may use personal information, such as information submitted to us in a job application, to facilitate our and other's recruitment activities and process employment applications, such as by evaluating a job candidate for an employment activity, and monitoring recruitment statistics. For our portfolio companies, we may use your personal information to assist their recruitment and employment process.
65+
66+
**Compliance and protection.** We may use your personal information to:
67+
68+
- comply with applicable laws, lawful requests, and legal process, such as to respond to subpoenas or requests from government authorities;
69+
- protect our, your or others' rights, privacy, safety or property (including by making and defending legal claims);
70+
- audit our internal processes for compliance with legal and contractual requirements or our internal policies;
71+
- enforce the terms and conditions that govern the Service; and
72+
- prevent, identify, investigate and deter fraudulent, harmful, unauthorized, unethical or illegal activity, including cyberattacks and identity theft.
73+
74+
**With your consent.** In some cases, we may specifically ask for your consent to collect, use or share your personal information, such as when required by law.
75+
76+
## How we share your personal information
77+
78+
We may share your personal information with the following parties and as otherwise described in this Privacy Policy or at the time of collection.
79+
80+
**Affiliates.** Our corporate parent, subsidiaries, and affiliates, for purposes consistent with this Privacy Policy.
81+
82+
**Service providers.** Third parties that provide services on our behalf or help us operate the Service or our business (such as hosting, information technology, email delivery, marketing, and website analytics).
83+
84+
**Professional advisors.** Professional advisors, such as lawyers, auditors, bankers and insurers, where necessary in the course of the professional services that they render to us.
85+
86+
**Authorities and others.** Law enforcement, government authorities, and private parties, as we believe in good faith to be necessary or appropriate for the compliance and protection purposes described above.
87+
88+
**Business transferees.** Acquirers and other relevant participants in business transactions (or negotiations and diligence for such transactions) involving a corporate divestiture, merger, consolidation, acquisition, reorganization, sale or other disposition of all or any portion of the business or assets of, or equity interests in, Open Core Ventures or our affiliates (including, in connection with a bankruptcy or similar proceedings).
89+
90+
## Your choices
91+
92+
You have the following choices with respect to your personal information.
93+
94+
**Opt-out of marketing communications.** You may opt-out of marketing-related emails by following the opt-out or unsubscribe instructions at the bottom of the email, or by [contacting us](#how-to-contact-us). Please note that if you choose to opt-out of marketing-related emails, you may continue to receive service-related and other non-marketing emails.
95+
96+
**Cookies.** Most browser settings let you delete and reject cookies placed by websites. Many browsers accept cookies by default until you change your settings. If you do not accept cookies, you may not be able to use all functionality of the Service and it may not work properly. For more information about cookies, including how to see what cookies have been set on your browser and how to manage and delete them, visit [https://allaboutcookies.org](https://allaboutcookies.org).
97+
98+
**Do Not Track.** Some Internet browsers may be configured to send "Do Not Track" signals to the online services that you visit. We currently do not respond to "Do Not Track" or similar signals. To find out more about "Do Not Track," please visit [https://allaboutdnt.com](https://allaboutdnt.com).
99+
100+
**Declining to provide information.** We need to collect personal information to provide certain services. If you do not provide the information we identify as required or mandatory, we may not be able to provide those services.
101+
102+
## Other sites and services
103+
104+
The Service may contain links to websites, mobile applications, and other online services operated by third parties. In addition, our content may be integrated into web pages or other online services that are not associated with us. These links and integrations are not an endorsement of, or representation that we are affiliated with, any third party. We do not control websites, mobile applications or online services operated by third parties, and we are not responsible for their actions. We encourage you to read the privacy policies of the other websites and mobile applications and online services you use.
105+
106+
## Security
107+
108+
We employ technical, organizational and physical safeguards designed to protect the personal information we collect. However, security risk is inherent in all internet and information technologies and we cannot guarantee the security of your personal information.
109+
110+
## International data transfer
111+
112+
We are headquartered in the United States and may use service providers that operate in other countries. Your personal information may be transferred to the United States or other locations where privacy laws may not be as protective as those in your state, province, or country.
113+
114+
## Children
115+
116+
The Service is not intended for use by children under 16 years of age. If we learn that we have collected personal information through the Service from a child under 16 without the consent of the child's parent or guardian as required by law, we will delete it. We encourage parents or guardians with concerns to contact us.
117+
118+
## Changes to this Privacy Policy
119+
120+
We reserve the right to modify this Privacy Policy at any time. If we make material changes to this Privacy Policy, we will notify you by updating the date of this Privacy Policy and posting it on the Service. If required by law we will also provide notification of changes in another way that we believe is reasonably likely to reach you, such as via email or another manner through the Service. Any modifications to this Privacy Policy will be effective upon our posting the modified version (or as otherwise indicated at the time of posting). In all cases, your use of the Service after the effective date of any modified Privacy Policy indicates your acceptance of the modified Privacy Policy.
121+
122+
## How to contact us
123+
124+
- **Email:** `contact@flowfuse.com`
125+
- **Mail:** `548 Market St PMB #24889, San Francisco, CA 94120-7775`

nuxt/nuxt.config.ts

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,14 @@
11
// https://nuxt.com/docs/api/configuration/nuxt-config
22
export default defineNuxtConfig({
33
devtools: { enabled: true },
4+
modules: ['@nuxt/content', 'nuxt-link-checker'],
5+
6+
linkChecker: {
7+
failOnError: true,
8+
// trailing-slash: 11ty pages use trailing slashes intentionally
9+
// no-error-response: links to 11ty pages return 404 in the Nuxt-only static output
10+
skipInspections: ['trailing-slash', 'no-error-response'],
11+
},
412

513
app: {
614
head: {
@@ -24,7 +32,7 @@ export default defineNuxtConfig({
2432
nitro: {
2533
preset: 'static',
2634
prerender: {
27-
routes: ['/terms'],
35+
routes: ['/terms', '/privacy-policy'],
2836
crawlLinks: false
2937
}
3038
},

nuxt/package.json

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,9 @@
99
"preview": "nuxt preview"
1010
},
1111
"devDependencies": {
12-
"nuxt": "^4.0.0"
12+
"@nuxt/content": "^3.13.0",
13+
"better-sqlite3": "^12.10.0",
14+
"nuxt": "^4.4.6",
15+
"nuxt-link-checker": "^5.0.10"
1316
}
1417
}

nuxt/pages/[...slug].vue

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
<script setup>
2+
const route = useRoute()
3+
const slug = Array.isArray(route.params.slug) ? route.params.slug.join('/') : route.params.slug
4+
5+
const { data: page } = await useAsyncData(`content-${slug}`, () =>
6+
queryCollection('pages').path(`/${slug}`).first()
7+
)
8+
9+
if (!page.value) {
10+
throw createError({ statusCode: 404, statusMessage: 'Page not found' })
11+
}
12+
13+
useHead({
14+
title: `${page.value.title} • FlowFuse`,
15+
meta: [{ name: 'robots', content: 'noindex' }]
16+
})
17+
</script>
18+
19+
<template>
20+
<div class="nohero w-full">
21+
<div class="w-full page hero">
22+
<div class="content">
23+
<div class="prose prose-blue container pt-12 m-auto max-w-4xl">
24+
<ContentRenderer :value="page" />
25+
</div>
26+
</div>
27+
</div>
28+
</div>
29+
</template>

0 commit comments

Comments
 (0)