diff --git a/README.md b/README.md index ec97354..1536093 100644 --- a/README.md +++ b/README.md @@ -4,8 +4,6 @@ Production-ready airfield website stack built with Astro, Directus, PostgreSQL, ## Local setup -Making a change here, what happens? - 1. Copy `.env.example` to `.env` and fill in the values. 2. Start the stack with Docker Compose. 3. Point your external Caddy instance at the frontend and Directus ports defined in `.env`. diff --git a/public/images/avata2.jpg b/public/images/avata2.jpg new file mode 100644 index 0000000..2ad6fb2 Binary files /dev/null and b/public/images/avata2.jpg differ diff --git a/public/images/runway.jpeg b/public/images/runway.jpeg new file mode 100644 index 0000000..4de3eba Binary files /dev/null and b/public/images/runway.jpeg differ diff --git a/src/components/ContactForm.astro b/src/components/ContactForm.astro new file mode 100644 index 0000000..3c3b12f --- /dev/null +++ b/src/components/ContactForm.astro @@ -0,0 +1,314 @@ +--- +const configuredApiBase = import.meta.env.PUBLIC_PPR_API_BASE ?? 'https://ppr.swansea-airport.wales/api/v1'; +const pprApiBase = configuredApiBase.replace(/\/$/, ''); +const contactRequestEndpoint = `${pprApiBase}/contact-requests/public`; +--- + +
+
+

General enquiries

+

Send us a message

+

+ Use this form for general airport, business, visiting, and community enquiries. For flight + requests, please use the dedicated PPR or drone request forms. +

+
+ +
+ + +
+
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+
+ +
+ +
+
+ +
+ + Sending your message... +
+ +
+

Message sent.

+

Thanks for getting in touch. The airport team will review your message and respond where needed.

+
+
+ +
+ + + + diff --git a/src/components/EventsList.astro b/src/components/EventsList.astro index 86b2a2d..cf48925 100644 --- a/src/components/EventsList.astro +++ b/src/components/EventsList.astro @@ -10,11 +10,11 @@ type Props = { description?: string; }; -const { events, title = 'Upcoming events', description = 'A quick scan list for pilots, visitors, and local supporters.' } = Astro.props as Props; +const { events, title = 'Upcoming events', } = Astro.props as Props; ---
- +
{events.length > 0 ? ( events.map((event) => { diff --git a/src/layouts/BaseLayout.astro b/src/layouts/BaseLayout.astro index 6236021..95e5aa3 100644 --- a/src/layouts/BaseLayout.astro +++ b/src/layouts/BaseLayout.astro @@ -84,7 +84,7 @@ const pageTitle = title ? `${title} ยท ${site.name}` : site.name;

Phone

{site.phone}

Email

-

info@swansea-airport.wales

+

tower@swansea-airport.wales

Contact

diff --git a/src/lib/fallback-data.ts b/src/lib/fallback-data.ts index e03a47a..1075c47 100644 --- a/src/lib/fallback-data.ts +++ b/src/lib/fallback-data.ts @@ -138,7 +138,7 @@ export const fallbackContacts: ContactItem[] = [ { name: 'Airport office', role: 'General enquiries', - email: 'info@swansea-airport.wales', + email: 'tower@swansea-airport.wales', phone: '01792 687 042', is_public: true, order: 1, diff --git a/src/pages/about/drones.astro b/src/pages/about/drones.astro index 875c4c1..abc440d 100644 --- a/src/pages/about/drones.astro +++ b/src/pages/about/drones.astro @@ -3,47 +3,157 @@ import BaseLayout from '../../layouts/BaseLayout.astro'; --- -
-

About

-

Drones

+ -

+

+
+ Drone aerial view over Swansea Airport +
+ +

About

+

Drones

+ +

Firstly, please be assured that Swansea Airport likes to help our drone flying colleagues where we possibly can.

-

+

You are likely aware that Swansea Airport has a Flight Restriction Zone (FRZ) and two Runway Protection Zones (RPZs) that are in place to protect the public and aircraft from the risk of an accident.

-

+

Swansea Airport Flight Restriction Zone and Runway Protection Zones map

-

+

It is a requirement to obtain permission from Swansea Airport before flying a drone within the FRZ or RPZs. This is to ensure that we can coordinate your flight with any other aircraft that may be operating in the area, and to ensure that you are aware of any operational considerations that may affect your flight.

-

+

Request a Drone Flight

-

+

We will then reply with any operational considerations and, if required, approve or decline a flight if it is within the FRZ or RPZs. We are not in the habit of declining, so please do submit your request, and we will do our best to accommodate you.

-

+

After this, all we ask is that on the day, you call us in tower on 01792 687042 twenty minutes prior to launch, so we can give you any operational updates and also broadcast a warning on our frequency to any aircraft.

-

Parachuting

-

+

Parachuting

+

Parachuting tends to take place Friday to Sunday from Spring to Winter. This can involve free fall descents from 15,000' AMSL. We recommend avoiding these times due to the requirement to ensure the safety of descending skydivers.

+ + + + diff --git a/src/pages/contact.astro b/src/pages/contact.astro index d6bc771..af8d91e 100644 --- a/src/pages/contact.astro +++ b/src/pages/contact.astro @@ -1,5 +1,6 @@ --- import BaseLayout from '../layouts/BaseLayout.astro'; +import ContactForm from '../components/ContactForm.astro'; import ContactList from '../components/ContactList.astro'; import { getContacts } from '../lib/directus'; import { site } from '../lib/site'; @@ -9,13 +10,9 @@ const contacts = await getContacts();
-
-

Contact

-

Reach the airport team

-

{site.address}

-

{site.phone}

-
+ +
diff --git a/src/pages/index.astro b/src/pages/index.astro index eaf1060..eb8645c 100644 --- a/src/pages/index.astro +++ b/src/pages/index.astro @@ -1,17 +1,14 @@ --- import BaseLayout from '../layouts/BaseLayout.astro'; import BannerRotator from '../components/BannerRotator.astro'; -import NoticeBanner from '../components/NoticeBanner.astro'; import FuelPricesWidget from '../components/FuelPricesWidget.astro'; import EventsList from '../components/EventsList.astro'; import FacebookWidget from '../components/FacebookWidget.astro'; import NewsFeed from '../components/NewsFeed.astro'; import { getUpcomingEvents } from '../lib/events'; -import { homepageHighlights } from '../lib/site'; -import { getEvents, getFuelPrices, getHomepageBannerImages, getNews, getNotices } from '../lib/directus'; +import { getEvents, getFuelPrices, getHomepageBannerImages, getNews } from '../lib/directus'; -const [notices, fuelPrices, events, news, bannerImages] = await Promise.all([ - getNotices(), +const [fuelPrices, events, news, bannerImages] = await Promise.all([ getFuelPrices(), getEvents(), getNews(), @@ -75,10 +72,11 @@ const businessPromos = [
-
- -
+
+ +
+
@@ -101,6 +99,30 @@ const businessPromos = [
+
+
+
+ Runway view at Swansea Airport +
+
+

Aviation businesses

+

Base your next chapter at Swansea Airport

+

+ With the new operators having secured a long-term lease, Swansea Airport is entering a + more stable period for investment, growth, and aviation activity. +

+

+ We are keen to hear from interested parties with aviation businesses who want to explore + basing themselves at Swansea, from flight training and maintenance to aircraft services, + experiences, hangarage, and complementary airfield operations. +

+ +
+
+
@@ -123,12 +145,67 @@ const businessPromos = [
- - - - - +
+ +