Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
19 changes: 13 additions & 6 deletions docs/about-3dstreet/privacy-policy.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
# Privacy Policy

Last updated: August 23, 2024
Last updated: May 27, 2026

This Privacy Policy describes Our policies and procedures on the collection, use and disclosure of Your information when You use the Service and tells You about Your privacy rights and how the law protects You.

Expand All @@ -19,7 +19,7 @@ For the purposes of this Privacy Policy:
- __Account__ means a unique account created for You to access our Service or parts of our Service.
- __Affiliate__ means an entity that controls, is controlled by or is under common control with a party, where "control" means ownership of 50% or more of the shares, equity interest or other securities entitled to vote for election of directors or other managing authority.

- __Application__ refers to 3DStreet App, the software program provided by the Company.
- __Application__ refers to the software programs provided by the Company, including the 3DStreet App and Bollard Buddy.



Expand Down Expand Up @@ -64,13 +64,18 @@ While using Our Service, We may ask You to provide Us with certain personally id

- Email address
- First name and last name
- Usage Data
- If You use our mobile Application, We may also process additional data, see "Camera, Photos, and Location Data" below.

#### Camera, Photos, and Location Data (Mobile Application)

When You use the augmented reality and capture features of our mobile applications (such as Bollard Buddy), We may process the following with Your permission:

- __Camera:__ The Application uses Your device camera to render augmented reality experiences. Camera input is processed on Your device to display virtual objects in your real-world surroundings. We do not store a live camera feed; only images You choose to capture are saved.
- __Photos and Images:__ When You capture a photo or save a design within the Application, that image may be stored locally on Your device and, if You are signed in, uploaded to and stored in Your private cloud gallery so it is available across Your devices and the 3DStreet web service.
- __Location:__ With Your permission, the Application may access Your device location to support location-aware augmented reality and to associate captured designs with a place. You can disable location access at any time in Your device settings.

- Usage Data


You may grant or revoke camera, photo library, and location permissions at any time through Your device's operating system settings. Revoking a permission may limit the functionality of the Application.

#### Usage Data

Expand Down Expand Up @@ -143,7 +148,9 @@ The Company may use Personal Data for the following purposes:

We may share Your personal information in the following situations:

- __With Service Providers:__ We may share Your personal information with Service Providers to monitor and analyze the use of our Service, to contact You.
- __With Service Providers:__ We may share Your personal information with Service Providers to monitor and analyze the use of our Service, to authenticate You, to store Your data, and to contact You. Our Service Providers include:
- __Google / Firebase__ (Google LLC) — provides authentication, database (Firestore), and file storage (Cloud Storage) services. Your account information and saved designs are stored using Firebase. See [Google's Privacy Policy](https://policies.google.com/privacy).
- __Apple__ (Apple Inc.) — when You sign in with Apple or use the Application on an Apple device, Apple processes authentication and platform data in accordance with [Apple's Privacy Policy](https://www.apple.com/legal/privacy/).
- __For business transfers:__ We may share or transfer Your personal information in connection with, or during negotiations of, any merger, sale of Company assets, financing, or acquisition of all or a portion of Our business to another company.
- __With Affiliates:__ We may share Your information with Our affiliates, in which case we will require those affiliates to honor this Privacy Policy. Affiliates include Our parent company and any other subsidiaries, joint venture partners or other companies that We control or that are under common control with Us.
- __With business partners:__ We may share Your information with Our business partners to offer You certain products, services or promotions.
Expand Down
22 changes: 22 additions & 0 deletions docusaurus.config.js
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,28 @@ const config = {
onBrokenMarkdownLinks: "warn",
},
},
headTags: [
{
tagName: "link",
attributes: {
rel: "preload",
href: "/fonts/hind-siliguri/HindSiliguri-Regular.ttf",
as: "font",
type: "font/ttf",
crossorigin: "anonymous",
},
},
{
tagName: "link",
attributes: {
rel: "preload",
href: "/fonts/hind-siliguri/HindSiliguri-Medium.ttf",
as: "font",
type: "font/ttf",
crossorigin: "anonymous",
},
},
],
presets: [
[
"classic",
Expand Down
6 changes: 3 additions & 3 deletions src/components/NavigationMenu/styles.css
Original file line number Diff line number Diff line change
Expand Up @@ -4,9 +4,9 @@
@import "@radix-ui/colors/purple.css";
@import "@radix-ui/colors/violet.css";

/* reset */
button,
p {
/* reset — do NOT add `p` here: a global `p { all: unset }` resets display
to inline and collapses every paragraph on the site (docs + blog + pages). */
button {
all: unset;
}

Expand Down
4 changes: 4 additions & 0 deletions src/css/styles.css
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,10 @@
Base styles
----------------------------------------------------------------*/

:root {
--ifm-font-family-base: "Hind Siliguri", system-ui, -apple-system, "Segoe UI", Roboto, sans-serif;
}

*,
*::before,
*::after {
Expand Down
216 changes: 216 additions & 0 deletions src/pages/bollardbuddy.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,216 @@
import React from 'react';
import { ExternalLinkIcon, ImageIcon, CubeIcon, Share1Icon } from '@radix-ui/react-icons';
import { Button } from '../components';
import NavigationMenu from '../components/NavigationMenu';
import Footer from '../components/Footer';

const TESTFLIGHT_URL = 'https://testflight.apple.com/join/7bjRttZh';

export default function BollardBuddyPage() {
return (
<>
<meta charSet="UTF-8" />
<meta httpEquiv="X-UA-Compatible" content="IE=edge" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Bollard Buddy for iOS: Place Bollards in AR | 3DStreet</title>
<meta
name="description"
content="Visualize safer streets in augmented reality. Place bollards, planters, and traffic-calming elements on real surfaces, then capture and share your street designs."
/>

{/* Open Graph and Twitter Meta Tags */}
<meta property="og:url" content="https://www.3dstreet.com/bollardbuddy" />
<meta property="og:type" content="website" />
<meta property="og:title" content="Bollard Buddy for iOS: Place Bollards in AR" />
<meta
property="og:description"
content="Visualize safer streets in augmented reality. Place bollards, planters, and traffic-calming elements on real surfaces, then capture and share your street designs."
/>
<meta property="og:image" content="/img/bollardbuddy/screenshot-1.png" />

<meta name="twitter:card" content="summary_large_image" />
<meta property="twitter:domain" content="3dstreet.com" />
<meta property="twitter:url" content="https://www.3dstreet.com/bollardbuddy" />
<meta name="twitter:title" content="Bollard Buddy for iOS: Place Bollards in AR" />
<meta
name="twitter:description"
content="Visualize safer streets in augmented reality. Place bollards, planters, and traffic-calming elements on real surfaces, then capture and share your street designs."
/>
<meta name="twitter:image" content="/img/bollardbuddy/screenshot-1.png" />

<div className="wrapper">
<img
className="st_header_ellipse"
src="/img/website/header_ellipse.png"
/>
<div className="st_main_grid_bg" />
<div className="newHeader">
<div className="logo">
<a href="/">
<img src="/img/3dstreet-logo.svg" alt="logo" />
</a>
</div>
<NavigationMenu />
<Button
variant="blue"
label="Join the TestFlight Beta"
trailingIcon={<ExternalLinkIcon />}
href={TESTFLIGHT_URL}
target="_blank"
/>
</div>

{/* HEADER SECTION */}
<header className="st_header_container"></header>
{/* MAIN SECTION */}
<main className="st_main">
<div className="st_main_wrapper">
<div className="st_main_container">
<div style={{ display: 'flex', gap: '2.5rem', alignItems: 'center', flexWrap: 'wrap' }}>
<div style={{ flex: '2 1 340px', minWidth: 0 }}>
<h1>Bollard Buddy for iOS</h1>
<p style={{ fontSize: '1.5rem', fontWeight: 600, opacity: 0.85, margin: '0 0 1.25rem' }}>
Place Bollards in AR
</p>
<p className="st_hero_paragraph">
Visualize safer streets in augmented reality. Point your iPhone at a sidewalk, curb, or
any space, and place virtual bollards, traffic cones, planters, benches, and more on
real surfaces. Capture photos of your designs and share them with neighbors, city
officials, or community groups working toward safer streets.
</p>
<p className="st_hero_paragraph">
Take your field captures into the 3DStreet Editor, where you can refine the design,
check measurements, and build presentation-ready visualizations that win over
decision makers.
</p>
<br />
<div className="st_hero_cta">
<Button
variant="blue"
label="Join the TestFlight Beta"
trailingIcon={<ExternalLinkIcon />}
href={TESTFLIGHT_URL}
target="_blank"
/>
<Button
variant="transparent"
label="Explore 3DStreet"
href="https://3dstreet.app"
target="_blank"
/>
</div>
</div>
<div style={{ flex: '1 1 220px', display: 'flex', justifyContent: 'center' }}>
<img
src="/img/bollardbuddy/screenshot-1.webp"
alt="Placing a bollard in AR on a real street with Bollard Buddy"
style={{
width: '100%',
maxWidth: '300px',
borderRadius: '24px',
boxShadow: '0 20px 60px rgba(0, 0, 0, 0.35)',
}}
/>
</div>
</div>

{/* FEATURES SECTION */}
<section className="st_statistics">
<div className="st_statistics_posts">
<div className="st_statistics_item">
<div className="st_statistics_icon">
<ImageIcon width={96} height={96} />
</div>
<div className="st_statistics_post_description">
<h3 className="st_statistics_post_title">Place in Real-World Context</h3>
<p>Use AR plane detection to drop street design elements directly onto the
sidewalk or roadway in front of you, exactly where they'd go.</p>
</div>
</div>

<div className="st_statistics_item">
<div className="st_statistics_icon">
<CubeIcon width={96} height={96} />
</div>
<div className="st_statistics_post_description">
<h3 className="st_statistics_post_title">Built-in Model Library</h3>
<p>Bollards are just the start. Place planters, trees, benches, traffic cones, and
other green infrastructure and traffic-safety models.</p>
</div>
</div>

<div className="st_statistics_item">
<div className="st_statistics_icon">
<Share1Icon width={96} height={96} />
</div>
<div className="st_statistics_post_description">
<h3 className="st_statistics_post_title">Capture &amp; Share</h3>
<p>Save snapshots to your device, share them on social media, or upload to your
private cloud gallery to revisit across devices.</p>
</div>
</div>
</div>
</section>
</div>
</div>
<div className="st_main_grid" />
</main>

{/* SCREENSHOTS SECTION */}
<section className="st_solutions">
<div className="st_solutions_inner">
<div className="st_solutions_grid">
<div className="st_solution_item">
<img
src="/img/bollardbuddy/screenshot-1.webp"
alt="Placing a bollard in AR on a real street"
style={{ width: '100%', borderRadius: '12px' }}
/>
</div>
<div className="st_solution_item">
<img
src="/img/bollardbuddy/screenshot-2.webp"
alt="Bollard Buddy built-in model library"
style={{ width: '100%', borderRadius: '12px' }}
/>
</div>
<div className="st_solution_item">
<img
src="/img/bollardbuddy/screenshot-3.webp"
alt="Sharing and saving an AR street design snapshot"
style={{ width: '100%', borderRadius: '12px' }}
/>
</div>
</div>
</div>
</section>

{/* CTA SECTION */}
<section className="st_blog">
<div className="st_blog_left_dot" />
<div className="st_blog_right_dot" />
<div className="st_blog_inner">
<div className="st_blog_title_description">
<h2>Step Outside and Transform Your Street</h2>
<p>Grab your iPhone and head out the door. The streets you walk every day are waiting to
be reimagined, and safer, greener blocks start with one person willing to picture them
first.</p>
</div>
<div className="st_cta_buttons">
<Button
variant="blue"
label="Join the TestFlight Beta"
trailingIcon={<ExternalLinkIcon />}
href={TESTFLIGHT_URL}
target="_blank"
/>
</div>
</div>
</section>

{/* FOOTER SECTION */}
<Footer />
</div>
</>
);
}
6 changes: 6 additions & 0 deletions static/fonts/fonts.css
Original file line number Diff line number Diff line change
Expand Up @@ -2,34 +2,40 @@
font-family: "Kanit";
src: url("/fonts/kanit/Kanit-SemiBold.ttf") format("truetype");
font-weight: 700;
font-display: swap;
}

@font-face {
font-family: "Kanit";
src: url("/fonts/kanit/Kanit-Medium.ttf") format("truetype");
font-weight: 600;
font-display: swap;
}

@font-face {
font-family: "Hind Siliguri";
src: url("/fonts/hind-siliguri/HindSiliguri-Regular.ttf") format("truetype");
font-weight: 400;
font-display: swap;
}

@font-face {
font-family: "Hind Siliguri";
src: url("/fonts/hind-siliguri/HindSiliguri-Medium.ttf") format("truetype");
font-weight: 500;
font-display: swap;
}

@font-face {
font-family: "Hind Siliguri";
src: url("/fonts/hind-siliguri/HindSiliguri-SemiBold.ttf") format("truetype");
font-weight: 600;
font-display: swap;
}

@font-face {
font-family: "Hind Siliguri";
src: url("/fonts/hind-siliguri/HindSiliguri-Bold.ttf") format("truetype");
font-weight: 700;
font-display: swap;
}
Binary file added static/img/bollardbuddy/screenshot-1.webp
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added static/img/bollardbuddy/screenshot-2.webp
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added static/img/bollardbuddy/screenshot-3.webp
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading