feat: perinco Pulse - Zeiterfassung fuer perinco
Erste Fassung, live unter https://pulse.perinco.de. Frontend React 19 + TypeScript + Tailwind 4 (Vite), Backend Express mit mysql2 auf MariaDB, Exporte als PDF (pdfkit), Excel (exceljs) und CSV. Aufbau, Designsystem und die sieben Themes kommen aus dem perinco CRM. Fachlich: - Buchung mit Wochen-, Monats- und Jahresansicht, Zeiten als 1:23 oder 1,5 - Projekte mit n Budgettoepfen: Laufzeit, Volumen, Sperre bei Ablauf oder aufgebrauchtem Budget, Buchung nur auf den passenden Topf - Kunden, Team mit Hierarchie, Reports im Harvest-Stil, Monatsexporte - Rollen user/lead/management/admin, doppelt geprueft (Menue und Backend) - SSO gegen Microsoft Entra ID, Uebernahme der AD-Benutzer per Drag & Drop Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,57 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1600 80" width="1600" height="80" preserveAspectRatio="xMidYMid slice">
|
||||
<!--
|
||||
Outdoor, obere Leiste: blauer Himmel mit Schleierwolken.
|
||||
|
||||
Die Leiste ist nur 80 px hoch und traegt Text - deshalb keine kraeftigen
|
||||
Kontraste, sondern ein weicher Verlauf und Wolken aus unscharfen Ellipsen.
|
||||
Der Schleier darueber kommt aus dem Theme (index.css), nicht aus dieser
|
||||
Datei: so tont derselbe Himmel im Dunkelmodus zur Nacht ab.
|
||||
-->
|
||||
<defs>
|
||||
<linearGradient id="himmel" x1="0" y1="0" x2="0" y2="1">
|
||||
<stop offset="0" stop-color="#5eb3e4" />
|
||||
<stop offset="0.55" stop-color="#8fcdec" />
|
||||
<stop offset="1" stop-color="#cfe8f5" />
|
||||
</linearGradient>
|
||||
<filter id="weich" x="-30%" y="-120%" width="160%" height="340%">
|
||||
<feGaussianBlur stdDeviation="9" />
|
||||
</filter>
|
||||
<filter id="sehrWeich" x="-40%" y="-200%" width="180%" height="500%">
|
||||
<feGaussianBlur stdDeviation="20" />
|
||||
</filter>
|
||||
</defs>
|
||||
|
||||
<rect width="1600" height="80" fill="url(#himmel)" />
|
||||
|
||||
<!-- Sonnenschein oben links, gerade so sichtbar -->
|
||||
<ellipse cx="240" cy="4" rx="260" ry="60" fill="#fff6d8" opacity="0.5" filter="url(#sehrWeich)" />
|
||||
|
||||
<!-- Wolkenbaenke: je drei bis vier Ellipsen, damit die Kanten unregelmaessig sind -->
|
||||
<g fill="#ffffff" filter="url(#weich)">
|
||||
<g opacity="0.85">
|
||||
<ellipse cx="150" cy="52" rx="120" ry="20" />
|
||||
<ellipse cx="230" cy="44" rx="80" ry="16" />
|
||||
<ellipse cx="86" cy="58" rx="70" ry="14" />
|
||||
</g>
|
||||
<g opacity="0.6">
|
||||
<ellipse cx="520" cy="30" rx="150" ry="17" />
|
||||
<ellipse cx="610" cy="24" rx="90" ry="13" />
|
||||
</g>
|
||||
<g opacity="0.8">
|
||||
<ellipse cx="880" cy="58" rx="170" ry="22" />
|
||||
<ellipse cx="960" cy="50" rx="110" ry="16" />
|
||||
<ellipse cx="800" cy="62" rx="90" ry="15" />
|
||||
</g>
|
||||
<g opacity="0.55">
|
||||
<ellipse cx="1240" cy="26" rx="140" ry="16" />
|
||||
<ellipse cx="1330" cy="34" rx="100" ry="14" />
|
||||
</g>
|
||||
<g opacity="0.78">
|
||||
<ellipse cx="1520" cy="56" rx="150" ry="20" />
|
||||
<ellipse cx="1440" cy="62" rx="90" ry="14" />
|
||||
</g>
|
||||
</g>
|
||||
|
||||
<!-- Dunstband am unteren Rand: laesst die Leiste sauber in den Inhalt uebergehen -->
|
||||
<rect y="60" width="1600" height="20" fill="#ffffff" opacity="0.28" filter="url(#weich)" />
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 2.3 KiB |
Reference in New Issue
Block a user