plecianki.pl
Jenkins Trigger / trigger_jenkins (push) Waiting to run Details

This commit is contained in:
Artur Kuś 2025-09-09 23:17:14 +02:00
parent e4cb267c1a
commit bb8dc1117c
31 changed files with 626 additions and 23 deletions

View File

@ -1,7 +1,7 @@
/**
* AUTOMATICALLY GENERATED FILE
* Domain: arti24.eu
* Generated at: 9.09.2025, 16:25:42
* Generated at: 9.09.2025, 21:59:39
* Mapping: /home/artur/_important_data_/_data_/_programs_/arti24/apps/arti24.eu/assets/pictures -> /home/artur/_important_data_/_data_/_programs_/arti24/apps/arti24.eu/src/generated
* Do NOT edit manually!
*/

View File

@ -1,7 +1,7 @@
/**
* AUTOMATICALLY GENERATED FILE
* Domain: arti24.eu
* Generated at: 9.09.2025, 16:25:42
* Generated at: 9.09.2025, 21:59:39
* Mapping: /home/artur/_important_data_/_data_/_programs_/arti24/apps/arti24.eu/assets/pictures -> /home/artur/_important_data_/_data_/_programs_/arti24/apps/arti24.eu/src/generated
* Do NOT edit manually!
*/

View File

@ -1,7 +1,7 @@
/**
* AUTOMATICALLY GENERATED FILE
* Domain: bodypainter.eu
* Generated at: 9.09.2025, 16:25:42
* Generated at: 9.09.2025, 21:59:39
* Mapping: /home/artur/_important_data_/_data_/_programs_/arti24/apps/bodypainter.eu/assets/pictures -> /home/artur/_important_data_/_data_/_programs_/arti24/apps/bodypainter.eu/src/generated
* Do NOT edit manually!
*/

View File

@ -1,7 +1,7 @@
/**
* AUTOMATICALLY GENERATED FILE
* Domain: bodypainter.eu
* Generated at: 9.09.2025, 16:25:42
* Generated at: 9.09.2025, 21:59:39
* Mapping: /home/artur/_important_data_/_data_/_programs_/arti24/apps/bodypainter.eu/assets/pictures -> /home/artur/_important_data_/_data_/_programs_/arti24/apps/bodypainter.eu/src/generated
* Do NOT edit manually!
*/

View File

@ -1,7 +1,7 @@
/**
* AUTOMATICALLY GENERATED FILE
* Domain: bodypainter.eu
* Generated at: 9.09.2025, 16:25:42
* Generated at: 9.09.2025, 21:59:39
* Mapping: /home/artur/_important_data_/_data_/_programs_/arti24/apps/bodypainter.eu/assets/pictures -> /home/artur/_important_data_/_data_/_programs_/arti24/apps/bodypainter.eu/src/generated
* Do NOT edit manually!
*/

View File

@ -1,7 +1,7 @@
/**
* AUTOMATICALLY GENERATED FILE
* Domain: driving.themself.eu
* Generated at: 9.09.2025, 16:25:42
* Generated at: 9.09.2025, 21:59:39
* Mapping: /home/artur/_important_data_/_data_/_programs_/arti24/apps/driving.themself.eu/assets/pictures -> /home/artur/_important_data_/_data_/_programs_/arti24/apps/driving.themself.eu/src/generated
* Do NOT edit manually!
*/

View File

@ -1,7 +1,7 @@
/**
* AUTOMATICALLY GENERATED FILE
* Domain: driving.themself.eu
* Generated at: 9.09.2025, 16:25:42
* Generated at: 9.09.2025, 21:59:39
* Mapping: /home/artur/_important_data_/_data_/_programs_/arti24/apps/driving.themself.eu/assets/pictures -> /home/artur/_important_data_/_data_/_programs_/arti24/apps/driving.themself.eu/src/generated
* Do NOT edit manually!
*/

View File

@ -1,7 +1,7 @@
/**
* AUTOMATICALLY GENERATED FILE
* Domain: kopama.com.pl
* Generated at: 9.09.2025, 16:25:42
* Generated at: 9.09.2025, 21:59:39
* Mapping: /home/artur/_important_data_/_data_/_programs_/arti24/apps/kopama.com.pl/assets/pictures -> /home/artur/_important_data_/_data_/_programs_/arti24/apps/kopama.com.pl/src/generated
* Do NOT edit manually!
*/

View File

@ -1,7 +1,7 @@
/**
* AUTOMATICALLY GENERATED FILE
* Domain: kopama.com.pl
* Generated at: 9.09.2025, 16:25:42
* Generated at: 9.09.2025, 21:59:39
* Mapping: /home/artur/_important_data_/_data_/_programs_/arti24/apps/kopama.com.pl/assets/pictures -> /home/artur/_important_data_/_data_/_programs_/arti24/apps/kopama.com.pl/src/generated
* Do NOT edit manually!
*/

View File

@ -1,7 +1,7 @@
/**
* AUTOMATICALLY GENERATED FILE
* Domain: kopama.com.pl
* Generated at: 9.09.2025, 16:25:42
* Generated at: 9.09.2025, 21:59:39
* Mapping: /home/artur/_important_data_/_data_/_programs_/arti24/apps/kopama.com.pl/assets/pictures -> /home/artur/_important_data_/_data_/_programs_/arti24/apps/kopama.com.pl/src/generated
* Do NOT edit manually!
*/

View File

@ -1,8 +1,8 @@
/**
* AUTOMATICALLY GENERATED FILE
* Domain: massage.themself
* Generated at: 9.09.2025, 09:11:44
* Mapping: /home/artur/_important_data_/_data_/_programs_/arti24/apps/massage.themself/assets/pictures -> /home/artur/_important_data_/_data_/_programs_/arti24/apps/massage.themself/src/generated
* Domain: massage.themself.eu
* Generated at: 9.09.2025, 21:59:39
* Mapping: /home/artur/_important_data_/_data_/_programs_/arti24/apps/massage.themself.eu/assets/pictures -> /home/artur/_important_data_/_data_/_programs_/arti24/apps/massage.themself.eu/src/generated
* Do NOT edit manually!
*/

View File

@ -1,8 +1,8 @@
/**
* AUTOMATICALLY GENERATED FILE
* Domain: massage.themself
* Generated at: 9.09.2025, 09:11:44
* Mapping: /home/artur/_important_data_/_data_/_programs_/arti24/apps/massage.themself/assets/pictures -> /home/artur/_important_data_/_data_/_programs_/arti24/apps/massage.themself/src/generated
* Domain: massage.themself.eu
* Generated at: 9.09.2025, 21:59:39
* Mapping: /home/artur/_important_data_/_data_/_programs_/arti24/apps/massage.themself.eu/assets/pictures -> /home/artur/_important_data_/_data_/_programs_/arti24/apps/massage.themself.eu/src/generated
* Do NOT edit manually!
*/

View File

@ -1,8 +1,8 @@
/**
* AUTOMATICALLY GENERATED FILE
* Domain: massage.themself
* Generated at: 9.09.2025, 09:11:44
* Mapping: /home/artur/_important_data_/_data_/_programs_/arti24/apps/massage.themself/assets/pictures -> /home/artur/_important_data_/_data_/_programs_/arti24/apps/massage.themself/src/generated
* Domain: massage.themself.eu
* Generated at: 9.09.2025, 21:59:39
* Mapping: /home/artur/_important_data_/_data_/_programs_/arti24/apps/massage.themself.eu/assets/pictures -> /home/artur/_important_data_/_data_/_programs_/arti24/apps/massage.themself.eu/src/generated
* Do NOT edit manually!
*/

View File

@ -0,0 +1,27 @@
// 🖤 Wariant 2: profesjonalny, kontrastowy
$theme-color-contrast: (
primary: #1f1f1f,
text-color: #f3f3f3,
secondary: #5e5e5e,
light: #f3f3f3,
dark: #000000,
dropdown-hover-bg: #333333,
dropdown-hover-color: white,
);
$active-theme: $theme-color-contrast; // domyślny motyw kolorystyczny
@import '../../../_common_/assets/css/custom-common.scss'; //
.navbar {
background-color: map-get($theme-color-contrast, primary);
color: map-get($theme-color-contrast, text-color);
.nav-link {
color: map-get($theme-color-contrast, text-color);
&:hover {
background-color: map-get($theme-color-contrast, dropdown-hover-bg);
color: map-get($theme-color-contrast, dropdown-hover-color);
}
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 385 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 268 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 312 KiB

View File

@ -0,0 +1,75 @@
import { Statistic } from '@packages/utils/Statistic.js';
import { PleciAnkiWebSite } from './PleciAnkiWebSite.js';
import { PicturesFileComponent } from '@packages/utils/PictureFileComponent.js';
import { I18nConfigurer } from '@packages/i18nConfigurer.js';
import { isProduction, version } from '@packages/common-configuration.js';
import { DomainDetails } from '@packages/Domain.js';
import { Paths } from '@packages/paths/Paths.js';
import { PictureRouteMapper } from '@packages/pictures/PictureRouteMapper.js';
import { App } from '@packages/websites/app/App.js';
import { pc } from './generated/picture-const.js';
// Stałe konfiguracyjne
const domain = 'plecianki.pl';
const APP_PORT = 3337;
const domainUrl = isProduction
? `https://${domain}`
: `http://localhost:${APP_PORT}`;
const domainDetails = DomainDetails.init(domain, domainUrl);
const paths = Paths.createSingleton(domainDetails, '-layout-template');
// Funkcja startowa aplikacji
async function startApp() {
try {
await I18nConfigurer.createSingleton(paths);
await PictureRouteMapper.createSingleton(paths);
const pictures = new PicturesFileComponent(pc);
// Inicjalizacja serwisu
const pleciankiWebSite = new PleciAnkiWebSite(pictures, paths);
// Inicjalizacja statystyk
const statistic = new Statistic(pleciankiWebSite);
// Wybór odpowiedniego widoku
const initOptions: Record<string, any> = {
isProduction: isProduction,
skipJson: false,
pc,
pictures,
statistic,
version,
};
// Inicjalizacja aplikacji
const pleciankiApp = new App(
pleciankiWebSite,
paths,
statistic,
initOptions,
);
await statistic.load();
await pleciankiApp.initApp(null);
// Uruchomienie serwera
pleciankiApp.start(APP_PORT);
} catch (err) {
console.error('Failed to start the app:', err);
}
}
// Uruchomienie aplikacji
startApp();

View File

@ -0,0 +1,77 @@
import { I18nConfigurer } from '@packages/i18nConfigurer.js';
import { Paths } from '@packages/paths/Paths.js';
import { WebPage } from '@packages/websites/WebPage.js';
import { PicturesFileComponent } from '@packages/utils/PictureFileComponent.js';
import { WebSite } from '@packages/websites/WebSite.js';
import { EnumChangefreq } from 'sitemap';
import ts from 'typescript';
import { pc } from './generated/picture-const.js';
enum PageId {
HOME = 'home',
PRIVACY_POLICY = 'privacy-policy',
}
enum PageRoutePolish {
HOME = '/',
PRIVACY_POLICY = '/polityka-prywatnosci',
}
enum PageRouteEnglish {
HOME = '/home',
PRIVACY_POLICY = '/privacy-policy',
}
export class PleciAnkiWebSite extends WebSite {
HOME: WebPage;
constructor(pictures: PicturesFileComponent, paths: Paths) {
super(pictures, paths, pc.PIKNIK_ZALPAKAMI);
const HOME = new WebPage(
this,
PageId.HOME,
PageRoutePolish.HOME,
PageRouteEnglish.HOME,
{},
1.0,
EnumChangefreq.DAILY,
);
// HOME.isLocalisedVersions = true;
this.HOME = HOME;
const PRIVACY_POLICY = new WebPage(
this,
PageId.PRIVACY_POLICY,
PageRoutePolish.PRIVACY_POLICY,
PageRouteEnglish.PRIVACY_POLICY,
{
nodeVersion: process.version,
tsVersion: ts.version,
citiVersion: I18nConfigurer.getSingleton()
.getVersionByTowns()
.versionShort(),
},
0.3,
EnumChangefreq.MONTHLY,
[],
);
PRIVACY_POLICY.isCommon = true;
PRIVACY_POLICY.cached = undefined;
this.initPages([HOME, PRIVACY_POLICY]);
}
getHomePage(): WebPage {
return this.HOME;
}
getAboutMePage(): WebPage {
return this.HOME;
}
}

View File

@ -0,0 +1,17 @@
/**
* AUTOMATICALLY GENERATED FILE
* Domain: plecianki.pl
* Generated at: 9.09.2025, 21:59:39
* Mapping: /home/artur/_important_data_/_data_/_programs_/arti24/apps/plecianki.pl/assets/pictures -> /home/artur/_important_data_/_data_/_programs_/arti24/apps/plecianki.pl/src/generated
* Do NOT edit manually!
*/
import { Picture } from "../../../../packages/pictures/Picture.js";
import { pfc } from "./picture-file-const.js";
class PictureConst {
PLECIANKI = new Picture(pfc.PLECIANKI);
PIKNIK_ZALPAKAMI = new Picture(pfc.PIKNIK_ZALPAKAMI);
WELCOME = new Picture(pfc.WELCOME);
}
export const pc = new PictureConst();

View File

@ -0,0 +1,16 @@
/**
* AUTOMATICALLY GENERATED FILE
* Domain: plecianki.pl
* Generated at: 9.09.2025, 21:59:39
* Mapping: /home/artur/_important_data_/_data_/_programs_/arti24/apps/plecianki.pl/assets/pictures -> /home/artur/_important_data_/_data_/_programs_/arti24/apps/plecianki.pl/src/generated
* Do NOT edit manually!
*/
import { PictureFile } from "../../../../packages/pictures/PictureFile.js";
class PictureFileConst {
PLECIANKI = new PictureFile('PleciAnki', 'jpg', [], ["pictures","PleciAnki"], 1536, 2048);
PIKNIK_ZALPAKAMI = new PictureFile('piknik-zalpakami', 'jpg', [], ["pictures","piknik-zalpakami"], 1440, 1920);
WELCOME = new PictureFile('welcome', 'png', [], ["pictures","welcome"], 1170, 1170);
}
export const pfc = new PictureFileConst();

View File

@ -0,0 +1,26 @@
<!DOCTYPE HTML>
<html lang="<%= language %>">
<head>
<%- include(`${common}/head-tag-contents`) %>
</head>
<body>
<header>
<%- include(`${common}/simple-top-navbar`) %>
</header>
<!-- Główna treść -->
<main class="container-fluid pt-0 pt-sm-6">
<%- include(inBodyPagePath) %> <!-- Dynamiczne załadowanie zawartości strony -->
</main>
<footer>
<%- include(`${common}/bottom-navbar`) %>
</footer>
<script type="application/ld+json">
<%- stringify( graph.viewFor( language, webPage ) ) %>
</script>
</body>
</html>

View File

@ -0,0 +1,8 @@
<section class="mb-5">
<h2 class="h3 fw-semibold mb-4 text-center">Najbliższe wydarzenia</h2>
<ul class="list-unstyled mx-auto" style="max-width: 400px;">
<li class="card p-3 mb-3 shadow-sm">📅 Spacer z alpakami 14 września 2025</li>
<li class="card p-3 mb-3 shadow-sm">📅 Warsztaty szydełkowania 21 września 2025</li>
<li class="card p-3 mb-3 shadow-sm">📅 Piknik rodzinny 5 października 2025</li>
</ul>
</section>;

View File

@ -0,0 +1,106 @@
<!DOCTYPE html>
<html lang="pl">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>PleciAnki Alpakarnia</title>
<!-- Tailwind -->
<link href="https://cdn.jsdelivr.net/npm/tailwindcss@2.2.19/dist/tailwind.min.css" rel="stylesheet">
<!-- Google Fonts -->
<link href="https://fonts.googleapis.com/css2?family=Quicksand:wght@400;600;700&display=swap" rel="stylesheet">
<style>
body { font-family: 'Quicksand', sans-serif; }
</style>
</head>
<body class="min-h-screen bg-gradient-to-b from-emerald-50 to-green-100 text-gray-800">
<!-- Nagłówek -->
<header class="bg-gradient-to-r from-green-200 to-emerald-300 p-10 text-center rounded-b-3xl shadow-md">
<h1 class="text-4xl font-extrabold text-gray-800">PleciAnki Alpakarnia</h1>
<p class="mt-3 text-lg text-gray-700">Spacery, warsztaty i wydarzenia wśród alpak</p>
</header>
<!-- Główna sekcja -->
<main class="max-w-5xl mx-auto p-8 space-y-16">
<!-- Oferta -->
<section>
<h2 class="text-3xl font-semibold mb-8 text-center">Co robimy?</h2>
<div class="grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-4 gap-6">
<div class="bg-white shadow-lg p-6 rounded-2xl text-center hover:shadow-xl transition">
🐑 <h3 class="font-bold text-lg mt-3">Spacery i spotkania</h3>
</div>
<div class="bg-white shadow-lg p-6 rounded-2xl text-center hover:shadow-xl transition">
🎨 <h3 class="font-bold text-lg mt-3">Warsztaty rękodzielnicze</h3>
</div>
<div class="bg-white shadow-lg p-6 rounded-2xl text-center hover:shadow-xl transition">
🎉 <h3 class="font-bold text-lg mt-3">Urodziny i wydarzenia</h3>
</div>
<div class="bg-white shadow-lg p-6 rounded-2xl text-center hover:shadow-xl transition">
🌳 <h3 class="font-bold text-lg mt-3">Pikniki plenerowe</h3>
</div>
</div>
</section>
<!-- Najbliższe wydarzenia -->
<section>
<h2 class="text-3xl font-semibold mb-6 text-center">Najbliższe wydarzenia</h2>
<ul class="space-y-4 max-w-md mx-auto">
<li class="bg-white shadow-md p-4 rounded-xl">📅 Spacer z alpakami 14 września 2025</li>
<li class="bg-white shadow-md p-4 rounded-xl">📅 Warsztaty szydełkowania 21 września 2025</li>
<li class="bg-white shadow-md p-4 rounded-xl">📅 Piknik rodzinny 5 października 2025</li>
</ul>
</section>
<!-- Cennik -->
<section>
<h2 class="text-3xl font-semibold mb-6 text-center">Cennik</h2>
<div class="grid grid-cols-1 sm:grid-cols-2 gap-6 max-w-3xl mx-auto">
<div class="bg-white p-6 rounded-xl shadow-md text-center">
<h3 class="font-bold text-lg">Spacer z alpakami</h3>
<p class="mt-2 text-emerald-700 font-semibold">40 zł / osoba</p>
</div>
<div class="bg-white p-6 rounded-xl shadow-md text-center">
<h3 class="font-bold text-lg">Warsztaty rękodzielnicze</h3>
<p class="mt-2 text-emerald-700 font-semibold">od 50 zł</p>
</div>
<div class="bg-white p-6 rounded-xl shadow-md text-center">
<h3 class="font-bold text-lg">Urodziny w Alpakarni</h3>
<p class="mt-2 text-emerald-700 font-semibold">od 300 zł</p>
</div>
<div class="bg-white p-6 rounded-xl shadow-md text-center">
<h3 class="font-bold text-lg">Piknik rodzinny</h3>
<p class="mt-2 text-emerald-700 font-semibold">20 zł / osoba</p>
</div>
</div>
</section>
<!-- Galeria -->
<section>
<h2 class="text-3xl font-semibold mb-6 text-center">Zobacz jak to wygląda</h2>
<div class="grid grid-cols-2 sm:grid-cols-4 gap-6">
<div class="bg-green-100 h-32 flex items-center justify-center rounded-xl shadow hover:scale-105 transition">🐑 Alpaki</div>
<div class="bg-green-100 h-32 flex items-center justify-center rounded-xl shadow hover:scale-105 transition">🎨 Warsztaty</div>
<div class="bg-green-100 h-32 flex items-center justify-center rounded-xl shadow hover:scale-105 transition">🎉 Urodziny</div>
<div class="bg-green-100 h-32 flex items-center justify-center rounded-xl shadow hover:scale-105 transition">🌳 Pikniki</div>
</div>
</section>
<!-- Kontakt -->
<section class="text-center">
<h2 class="text-3xl font-semibold mb-6">Skontaktuj się</h2>
<p class="mb-2">📍 Obora, ul. Bursztynowa 33a</p>
<p class="mb-2">📞 518 783 804</p>
<p class="mb-2">✉️ kontakt@plecianki.pl</p>
</section>
</main>
<!-- Stopka -->
<footer class="bg-gradient-to-r from-green-200 to-emerald-300 p-6 text-center text-sm mt-16 rounded-t-3xl shadow-inner">
<p>© <%= new Date().getFullYear() %> PleciAnki Alpakarnia</p>
<p class="mt-2 text-gray-700">Stworzone z ❤️ w Oborze</p>
</footer>
</body>
</html>

View File

@ -0,0 +1,109 @@
<!DOCTYPE html>
<html lang="pl">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>PleciAnki Alpakarnia</title>
<!-- Tailwind -->
<script src="https://cdn.tailwindcss.com"></script>
<!-- Google Fonts -->
<link href="https://fonts.googleapis.com/css2?family=Baloo+2:wght@400;600;700&display=swap" rel="stylesheet">
<style>
body { font-family: 'Baloo 2', cursive; }
</style>
</head>
<body class="min-h-screen bg-gradient-to-b from-pink-50 via-yellow-50 to-green-50 text-gray-800">
<!-- Nagłówek -->
<header class="bg-gradient-to-r from-pink-200 via-yellow-200 to-green-200 p-10 text-center rounded-b-[50px] shadow-md">
<h1 class="text-5xl font-extrabold text-gray-800">PleciAnki Alpakarnia</h1>
<p class="mt-3 text-xl text-gray-700">Spacery, warsztaty i wydarzenia wśród alpak</p>
</header>
<!-- Główna sekcja -->
<main class="max-w-6xl mx-auto p-8 space-y-20">
<!-- Oferta -->
<section>
<h2 class="text-4xl font-bold mb-8 text-center text-pink-600">Co robimy?</h2>
<div class="grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-4 gap-8">
<div class="bg-pink-100 p-6 rounded-3xl text-center shadow-lg hover:scale-105 transition">
🐑 <h3 class="font-bold text-xl mt-3">Spacery i spotkania</h3>
</div>
<div class="bg-yellow-100 p-6 rounded-3xl text-center shadow-lg hover:scale-105 transition">
🎨 <h3 class="font-bold text-xl mt-3">Warsztaty rękodzielnicze</h3>
</div>
<div class="bg-green-100 p-6 rounded-3xl text-center shadow-lg hover:scale-105 transition">
🎉 <h3 class="font-bold text-xl mt-3">Urodziny i wydarzenia</h3>
</div>
<div class="bg-pink-100 p-6 rounded-3xl text-center shadow-lg hover:scale-105 transition">
🌳 <h3 class="font-bold text-xl mt-3">Pikniki plenerowe</h3>
</div>
</div>
</section>
<!-- Najbliższe wydarzenia -->
<section>
<h2 class="text-4xl font-bold mb-6 text-center text-yellow-600">Najbliższe wydarzenia</h2>
<ul class="space-y-4 max-w-lg mx-auto">
<li class="bg-white shadow-md p-6 rounded-3xl">📅 Spacer z alpakami 14 września 2025</li>
<li class="bg-white shadow-md p-6 rounded-3xl">📅 Warsztaty szydełkowania 21 września 2025</li>
<li class="bg-white shadow-md p-6 rounded-3xl">📅 Piknik rodzinny 5 października 2025</li>
</ul>
</section>
<!-- Cennik -->
<section>
<h2 class="text-4xl font-bold mb-6 text-center text-green-600">Cennik</h2>
<div class="grid grid-cols-1 sm:grid-cols-2 gap-8 max-w-3xl mx-auto">
<div class="bg-pink-100 p-6 rounded-3xl shadow-md text-center">
<h3 class="font-bold text-xl">Spacer z alpakami</h3>
<p class="mt-2 text-pink-700 font-semibold text-lg">40 zł / osoba</p>
</div>
<div class="bg-yellow-100 p-6 rounded-3xl shadow-md text-center">
<h3 class="font-bold text-xl">Warsztaty rękodzielnicze</h3>
<p class="mt-2 text-yellow-700 font-semibold text-lg">od 50 zł</p>
</div>
<div class="bg-green-100 p-6 rounded-3xl shadow-md text-center">
<h3 class="font-bold text-xl">Urodziny w Alpakarni</h3>
<p class="mt-2 text-green-700 font-semibold text-lg">od 300 zł</p>
</div>
<div class="bg-pink-100 p-6 rounded-3xl shadow-md text-center">
<h3 class="font-bold text-xl">Piknik rodzinny</h3>
<p class="mt-2 text-pink-700 font-semibold text-lg">20 zł / osoba</p>
</div>
</div>
</section>
<!-- Galeria -->
<section>
<h2 class="text-4xl font-bold mb-6 text-center text-pink-600">Zobacz jak to wygląda</h2>
<div class="grid grid-cols-2 sm:grid-cols-4 gap-6">
<img src="/images/alpaka1.jpg" class="rounded-3xl shadow-lg hover:scale-105 transition" alt="Alpaka">
<img src="/images/alpaka2.jpg" class="rounded-3xl shadow-lg hover:scale-105 transition" alt="Warsztaty">
<img src="/images/alpaka3.jpg" class="rounded-3xl shadow-lg hover:scale-105 transition" alt="Urodziny">
<img src="/images/alpaka4.jpg" class="rounded-3xl shadow-lg hover:scale-105 transition" alt="Piknik">
</div>
</section>
<!-- Kontakt -->
<section class="text-center">
<h2 class="text-4xl font-bold mb-6 text-yellow-600">Skontaktuj się</h2>
<p class="mb-2">📍 Obora, ul. Bursztynowa 33a</p>
<p class="mb-2">📞 518 783 804</p>
<p class="mb-6">✉️ kontakt@plecianki.pl</p>
<a href="tel:518783804" class="inline-block bg-pink-400 text-white px-8 py-4 rounded-full font-bold text-lg hover:bg-pink-500 transition">
📞 Zadzwoń i zapisz się!
</a>
</section>
</main>
<!-- Stopka -->
<footer class="bg-gradient-to-r from-pink-200 via-yellow-200 to-green-200 p-6 text-center text-sm mt-20 rounded-t-[50px] shadow-inner">
<p>© <%= new Date().getFullYear() %> PleciAnki Alpakarnia</p>
<p class="mt-2 text-gray-700">Stworzone z ❤️ w Oborze</p>
</footer>
</body>
</html>

View File

@ -0,0 +1,113 @@
<!DOCTYPE html>
<html lang="pl">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>PleciAnki Alpakarnia</title>
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/css/bootstrap.min.css" rel="stylesheet">
<link href="https://fonts.googleapis.com/css2?family=Quicksand:wght@400;600;700&display=swap" rel="stylesheet">
<style>
body {
font-family: 'Quicksand', sans-serif;
background: linear-gradient(to bottom, #d9f991, #c1f2b6); /* Odpowiednik from-emerald-50 to-green-100 */
}
.header-bg {
background: linear-gradient(to right, #b4eec1, #84d8a1); /* Odpowiednik from-green-200 to-emerald-300 */
}
.rounded-b-3xl {
border-bottom-left-radius: 1.5rem;
border-bottom-right-radius: 1.5rem;
}
.rounded-t-3xl {
border-top-left-radius: 1.5rem;
border-top-right-radius: 1.5rem;
}
</style>
</head>
<body class="min-vh-100 text-dark">
<header class="header-bg py-5 text-center rounded-b-3xl shadow">
<div class="container">
<h1 class="display-4 fw-bold text-dark">PleciAnki Alpakarnia</h1>
<p class="lead mt-3 text-secondary">Spacery, warsztaty i wydarzenia wśród alpak</p>
</div>
</header>
<main class="container py-5">
<section class="mb-5">
<h2 class="h3 fw-semibold mb-4 text-center">Co robimy?</h2>
<div class="row g-4">
<div class="col-6 col-lg-3">
<div class="card p-4 text-center shadow-sm w-100">
🐑 <h3 class="h5 fw-bold mt-2">Spacery i spotkania</h3>
<div class="col-11 col-lg-4 align-self-start">
<% const picture = pc.PLECIANKI; picture.loading='eager';picture.fetchPriority = "high";
const pictureLD = picture.getLocalisedDescriptionForPage( language, webPage); %>
<%- include(`${common}/picture`,{ picture : picture, alt : pictureLD.alt, ariaLabel : pictureLD['aria-label'] } )
%>
</div>
</div>
>
</div>
<div class="col-6 col-lg-3">
<div class="card p-4 text-center shadow-sm h-100">
🎨 <h3 class="h5 fw-bold mt-2">Warsztaty rękodzielnicze</h3>
</div>
</div>
<div class="col-6 col-lg-3">
<div class="card p-4 text-center shadow-sm h-100">
🎉 <h3 class="h5 fw-bold mt-2">Urodziny i wydarzenia</h3>
</div>
</div>
<div class="col-6 col-lg-3">
<div class="card p-4 text-center shadow-sm h-100">
🌳 <h3 class="h5 fw-bold mt-2">Pikniki plenerowe</h3>
</div>
</div>
</div>
</section>
<section class="mb-5">
<h2 class="h3 fw-semibold mb-4 text-center">Zobacz jak to wygląda</h2>
<div class="row g-4">
<div class="col-6 col-md-3">
<div class="bg-success text-white bg-opacity-25 py-5 text-center rounded-3 shadow">🐑 Alpaki</div>
</div>
<div class="col-6 col-md-3">
<div class="bg-success text-white bg-opacity-25 py-5 text-center rounded-3 shadow">🎨 Warsztaty</div>
</div>
<div class="col-6 col-md-3">
<div class="bg-success text-white bg-opacity-25 py-5 text-center rounded-3 shadow">🎉 Urodziny</div>
</div>
<div class="col-6 col-md-3">
<div class="bg-success text-white bg-opacity-25 py-5 text-center rounded-3 shadow">🌳 Pikniki</div>
</div>
</div>
</section>
<section class="text-center mb-5">
<h2 class="h3 fw-semibold mb-4">Skontaktuj się</h2>
<p class="mb-2">📍 Obora, ul. Bursztynowa 33a</p>
<p class="mb-2">📞 518 783 804</p>
<p class="mb-2">✉️ kontakt@plecianki.pl</p>
<a class="mb-2" href="https://www.facebook.com/PleciAnkiAlpakarnia/">Zobacz na face!</a>
</section>
</main>
<footer class="header-bg p-4 text-center text-sm mt-5 rounded-t-3xl shadow-inset">
<div class="container">
<p class="m-0">&copy; <%= new Date().getFullYear() %> PleciAnki Alpakarnia</p>
<p class="mt-2 text-secondary">Stworzone z ❤️ w Oborze</p>
</div>
</footer>
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/js/bootstrap.bundle.min.js"></script>
</body>
</html>

View File

@ -0,0 +1,29 @@
<section class="mb-5">
<h2 class="h3 fw-semibold mb-4 text-center">Cennik</h2>
<div class="row g-4 justify-content-center">
<div class="col-6 col-md-4">
<div class="card p-4 shadow-sm text-center h-100">
<h3 class="h5 fw-bold">Spacer z alpakami</h3>
<p class="mt-2 text-success fw-semibold">40 zł / osoba</p>
</div>
</div>
<div class="col-6 col-md-4">
<div class="card p-4 shadow-sm text-center h-100">
<h3 class="h5 fw-bold">Warsztaty rękodzielnicze</h3>
<p class="mt-2 text-success fw-semibold">od 50 zł</p>
</div>
</div>
<div class="col-6 col-md-4">
<div class="card p-4 shadow-sm text-center h-100">
<h3 class="h5 fw-bold">Urodziny w Alpakarni</h3>
<p class="mt-2 text-success fw-semibold">od 300 zł</p>
</div>
</div>
<div class="col-6 col-md-4">
<div class="card p-4 shadow-sm text-center h-100">
<h3 class="h5 fw-bold">Piknik rodzinny</h3>
<p class="mt-2 text-success fw-semibold">20 zł / osoba</p>
</div>
</div>
</div>
</section>;

View File

@ -1,7 +1,7 @@
/**
* AUTOMATICALLY GENERATED FILE
* Domain: themself.eu
* Generated at: 9.09.2025, 16:25:42
* Generated at: 9.09.2025, 21:59:39
* Mapping: /home/artur/_important_data_/_data_/_programs_/arti24/apps/themself.eu/assets/pictures -> /home/artur/_important_data_/_data_/_programs_/arti24/apps/themself.eu/src/generated
* Do NOT edit manually!
*/

View File

@ -1,7 +1,7 @@
/**
* AUTOMATICALLY GENERATED FILE
* Domain: themself.eu
* Generated at: 9.09.2025, 16:25:42
* Generated at: 9.09.2025, 21:59:39
* Mapping: /home/artur/_important_data_/_data_/_programs_/arti24/apps/themself.eu/assets/pictures -> /home/artur/_important_data_/_data_/_programs_/arti24/apps/themself.eu/src/generated
* Do NOT edit manually!
*/

View File

@ -4,6 +4,6 @@ export const DOMAINS = [
'kopama.com.pl',
'themself.eu',
'massage.themself.eu',
'plecianki.pl',
'arti24.eu',
];

View File

@ -40,7 +40,7 @@ export abstract class WebSite extends GraphOrg {
constructor(
public pictures: PicturesFileComponent,
protected paths: Paths,
private readonly logo: Picture,
private readonly logo: Picture | undefined,
) {
super();
this.domainUrl = DomainDetails.getSingleton().domainUrl;