From fdc5b48be6157dc5c162159dece6879a790d5278 Mon Sep 17 00:00:00 2001 From: Flatlogic Bot Date: Wed, 17 Dec 2025 18:33:17 +0000 Subject: [PATCH] initial version --- assets/vm-shot-2025-12-17T18-33-07-698Z.jpg | Bin 0 -> 22307 bytes core/__pycache__/forms.cpython-311.pyc | Bin 0 -> 1256 bytes core/__pycache__/models.cpython-311.pyc | Bin 209 -> 1265 bytes core/__pycache__/urls.cpython-311.pyc | Bin 347 -> 441 bytes core/__pycache__/views.cpython-311.pyc | Bin 1364 -> 1301 bytes core/forms.py | 14 ++ core/migrations/0001_initial.py | 25 +++ .../__pycache__/0001_initial.cpython-311.pyc | Bin 0 -> 1506 bytes core/models.py | 16 +- core/templates/base.html | 5 +- core/templates/core/add_project.html | 28 +++ core/templates/core/index.html | 195 +++++------------- core/urls.py | 8 +- core/views.py | 38 ++-- static/css/custom.css | 68 +++++- staticfiles/css/custom.css | 79 +++++-- 16 files changed, 286 insertions(+), 190 deletions(-) create mode 100644 assets/vm-shot-2025-12-17T18-33-07-698Z.jpg create mode 100644 core/__pycache__/forms.cpython-311.pyc create mode 100644 core/forms.py create mode 100644 core/migrations/0001_initial.py create mode 100644 core/migrations/__pycache__/0001_initial.cpython-311.pyc create mode 100644 core/templates/core/add_project.html diff --git a/assets/vm-shot-2025-12-17T18-33-07-698Z.jpg b/assets/vm-shot-2025-12-17T18-33-07-698Z.jpg new file mode 100644 index 0000000000000000000000000000000000000000..51fde122eeda57b0c02dbbaa5207f5a391f45912 GIT binary patch literal 22307 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 literal 0 HcmV?d00001 diff --git a/core/__pycache__/forms.cpython-311.pyc b/core/__pycache__/forms.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..054082f5c1fa1d0314f2d516055776059f57621c GIT binary patch literal 1256 zcma)5J8u&~5Z=9)UkM3{F;;j#)WH~J*^ly06W+W-LsEl`CTga8Rhw1ldti4X{24j}0>Kr)6EssHn?2*5sDA!#yF z7J(W$;-(6zykwKAa|A;xvOw$#HeEAx4rL#ydym=M00Rvopb0@V$f60mEZ=>$LefMe zvIr7Q^uP)%!T?~j=h^j{at4S+OU5|)D*VsHXJIOmf<+-L%c=Prd@N1ZSj^Fu1g#$@xN4ojIfNTpYyU)3~lzZPc*1KBVg(8-^905I$Q}W{23K%2F9y$RT`MXzUeUb)VPj z4VT99EL5l}ivc=~td!9*cAX!f%PVp^oqcataklZUQF9wvyo$|+Ym@AXO+Gkv!^BzB zCO8`mTc*B7C0-7~i^=0V-+-lKz}cmJ7}%(s&H zb~5j$CO7exz4zvz<~^A8QiWEk&`uTnadl_1nLW&SFH7FTx17hd*0|Ol*ZlOjK=4=O%rJ3w&yEn28Tff|%=b<%I0%6`W>HnBf+|LB z*$&&K1TA#Je#Yi`Kl#H86BtbDG&&Ow!xJ*Wp!kDwbS63?gwO|RZ;*X(!yDv|6o)MF S^I~&yD|^iMPcAqNlK%_2O*6v) literal 0 HcmV?d00001 diff --git a/core/__pycache__/models.cpython-311.pyc b/core/__pycache__/models.cpython-311.pyc index 9aa598b9d5171b2bb0d207f045e07f9fbbb95a64..9b59ba3a6115bfcd07b201060b7c863c71ea5101 100644 GIT binary patch literal 1265 zcmZuxy>HV%6h9}t6 z=*J|7z$Ct#*pVO$tdO+SKM~2Xi1a@=DHgNWXJ?-kVzrxCekuw0!q*F#2seW zsp00M`3O%nO>Eig*xKN!J3|rd3ZvMpwL*___do$(x`o$l%V^owhNl382I|+%zP|Sj z^wvZfx7P7=Q{b$*o;cFLPjr)7t8SHN9#gh#J5;xDgYxuE+j1GMQp@#naQG^A@ienr zP1|UFd1cgaUScZP51ayBz)`D)_l|&zi7&?E6&Jgnlb2aWs0pKL*9_|L1feU~Gu?g` zW7J-V5we(!{X@XE(Nk21JtSz9REGJG#T~`&P;Kql;U88{;{KQ>OEq|U}IB)iCOP6k>B|UtUY>q5qT=! zLqpas_cADRa_fAcoOtc{7jO8=Vn4LN_<_ zaw^Ep_=PKeuGq;HgIuw_*v+2adK_d=`{yqE+4)X(KFH3uOQRHrKRx{Rz+bg}wb@ad zf!b^@^kgY^yobhFScxd2oR@iu)UmZ{&ywY^U9nr@2N2eHMie@#`*(6K?E58l798T+ jJGX%KqLL(a(MkXBw&SrZc24q%h_%Y=G)Yb5iY! aIDle|KwK<4c@B#d_XP$SASz-5iU0s7Tp)-5 diff --git a/core/__pycache__/urls.cpython-311.pyc b/core/__pycache__/urls.cpython-311.pyc index 1f807fae1897c89361c99c5e868a26d00799b73f..fca779b67193b6fe14f7dbb70752e2776c47716b 100644 GIT binary patch literal 441 zcmZuryH3L}6upk^&^A<+SQtP^9T+M>Ggkrz#LR+NvY-%KeUO)&gchcb{esdj;33%f zkyPqXd1dNWsS-mc>{130$Jh3~KIi(Lr*gRj3d7IS_Pe@2bnydooh%%cJOBfRd$qVvs%OGag!UonZJT$K zRqskAEybx>DHmb#0t=;q<$>Lb0&Zv5S(s)v?{P0nBVl(Vag)TZ$89eXidLW2F{w^SbxI2AZEv*m Xe4LZUm^3D&F{ij<^ew$aSq=IE9rSZw delta 256 zcmdnVe4D9$IWI340}vcY|CNyiq#uJgFu)3Be6|5HrZc24q%h_%m#;sXkR zOepr6?8_)+@qj`60xJ5z#=y$i;L;(~5i*1A0*m}b7WpeI@*kL)_?a5GL9mDis2u=> C8#+b+ diff --git a/core/__pycache__/views.cpython-311.pyc b/core/__pycache__/views.cpython-311.pyc index 6867ddf286a519cf1754ac97038f9f1e4605fbf2..e9ce81599c84296af2ca141641c851dc14e5f713 100644 GIT binary patch literal 1301 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 {% endif %} {% load static %} - + + + + {% block head %}{% endblock %} diff --git a/core/templates/core/add_project.html b/core/templates/core/add_project.html new file mode 100644 index 0000000..b7656a1 --- /dev/null +++ b/core/templates/core/add_project.html @@ -0,0 +1,28 @@ +{% extends 'base.html' %} +{% load static %} + +{% block title %}Dodaj Nowy Projekt - webFirma{% endblock %} + +{% block content %} + +{% endblock %} diff --git a/core/templates/core/index.html b/core/templates/core/index.html index faec813..0695ca6 100644 --- a/core/templates/core/index.html +++ b/core/templates/core/index.html @@ -1,145 +1,58 @@ -{% extends "base.html" %} +{% extends 'base.html' %} +{% load static %} -{% block title %}{{ project_name }}{% endblock %} - -{% block head %} - - - - -{% endblock %} +{% block title %}Pulpit - webFirma{% endblock %} {% block content %} -
-
-

Analyzing your requirements and generating your app…

-
- Loading… +
+
+

Witaj w webFirma

+

Kompleksowe zarządzanie firmą w jednym miejscu.

-

AppWizzy AI is collecting your requirements and applying the first changes.

-

This page will refresh automatically as the plan is implemented.

-

- Runtime: Django {{ django_version }} · Python {{ python_version }} - — UTC {{ current_time|date:"Y-m-d H:i:s" }} -

-
-
-
- Page updated: {{ current_time|date:"Y-m-d H:i:s" }} (UTC) -
-{% endblock %} \ No newline at end of file + + +
+
+
+

Projekty

+ Dodaj projekt +
+ +
+
+ {% if projects %} +
+ + + + + + + + + + + + {% for project in projects %} + + + + + + + + {% endfor %} + +
Nazwa projektuKontrahentData rozpoczęciaData zakończeniaStatus
{{ project.name }}{{ project.client }}{{ project.start_date|date:"Y-m-d" }}{{ project.end_date|date:"Y-m-d" }}{{ project.get_status_display }}
+
+ {% else %} +
+

Brak projektów do wyświetlenia.

+

Utwórz swój pierwszy projekt, aby zacząć zarządzać pracą.

+
+ {% endif %} +
+
+
+
+{% endblock %} diff --git a/core/urls.py b/core/urls.py index 6299e3d..ffbdf8e 100644 --- a/core/urls.py +++ b/core/urls.py @@ -1,7 +1,7 @@ from django.urls import path - -from .views import home +from .views import index, add_project urlpatterns = [ - path("", home, name="home"), -] + path('', index, name='index'), + path('add-project/', add_project, name='add_project'), +] \ No newline at end of file diff --git a/core/views.py b/core/views.py index c9aed12..0bb211f 100644 --- a/core/views.py +++ b/core/views.py @@ -1,25 +1,17 @@ -import os -import platform +from django.shortcuts import render, redirect +from .models import Project +from .forms import ProjectForm -from django import get_version as django_version -from django.shortcuts import render -from django.utils import timezone +def index(request): + projects = Project.objects.all().order_by('-start_date') + return render(request, 'core/index.html', {'projects': projects}) - -def home(request): - """Render the landing screen with loader and environment details.""" - host_name = request.get_host().lower() - agent_brand = "AppWizzy" if host_name == "appwizzy.com" else "Flatlogic" - now = timezone.now() - - context = { - "project_name": "New Style", - "agent_brand": agent_brand, - "django_version": django_version(), - "python_version": platform.python_version(), - "current_time": now, - "host_name": host_name, - "project_description": os.getenv("PROJECT_DESCRIPTION", ""), - "project_image_url": os.getenv("PROJECT_IMAGE_URL", ""), - } - return render(request, "core/index.html", context) +def add_project(request): + if request.method == 'POST': + form = ProjectForm(request.POST) + if form.is_valid(): + form.save() + return redirect('index') + else: + form = ProjectForm() + return render(request, 'core/add_project.html', {'form': form}) \ No newline at end of file diff --git a/static/css/custom.css b/static/css/custom.css index 925f6ed..5846dab 100644 --- a/static/css/custom.css +++ b/static/css/custom.css @@ -1,4 +1,66 @@ -/* Custom styles for the application */ -body { - font-family: system-ui, -apple-system, sans-serif; +:root { + --bs-primary: #1A237E; + --bs-secondary: #6c757d; + --bs-success: #198754; + --bs-info: #0dcaf0; + --bs-warning: #ffc107; + --bs-danger: #dc3545; + --bs-light: #F5F5F5; + --bs-dark: #212121; + --bs-primary-rgb: 26, 35, 126; + --bs-font-sans-serif: 'Lato', sans-serif; } + +h1, h2, h3, h4, h5, h6, .h1, .h2, .h3, .h4, .h5, .h6 { + font-family: 'Poppins', sans-serif; + font-weight: 600; +} + +body { + background-color: var(--bs-light); + color: var(--bs-dark); +} + +.hero-section { + background: linear-gradient(to right, #1A237E, #2962FF); + padding: 4rem 0; + margin-bottom: -1px; /* Overlap to avoid gap */ +} + +.section-title { + color: var(--bs-primary); + font-weight: 700; +} + +.btn-primary { + background-color: #2962FF; + border-color: #2962FF; + transition: background-color 0.2s ease-in-out, border-color 0.2s ease-in-out; +} + +.btn-primary:hover { + background-color: #1A237E; + border-color: #1A237E; +} + +.card { + border: none; +} + +.card-header.bg-primary { + background-color: var(--bs-primary) !important; +} + +.table { + margin-bottom: 0; +} + +.table th { + font-weight: 600; + color: var(--bs-dark); +} + +.badge.bg-primary-soft { + color: var(--bs-primary); + background-color: rgba(var(--bs-primary-rgb), 0.1); +} \ No newline at end of file diff --git a/staticfiles/css/custom.css b/staticfiles/css/custom.css index 108056f..5846dab 100644 --- a/staticfiles/css/custom.css +++ b/staticfiles/css/custom.css @@ -1,21 +1,66 @@ - :root { - --bg-color-start: #6a11cb; - --bg-color-end: #2575fc; - --text-color: #ffffff; - --card-bg-color: rgba(255, 255, 255, 0.01); - --card-border-color: rgba(255, 255, 255, 0.1); + --bs-primary: #1A237E; + --bs-secondary: #6c757d; + --bs-success: #198754; + --bs-info: #0dcaf0; + --bs-warning: #ffc107; + --bs-danger: #dc3545; + --bs-light: #F5F5F5; + --bs-dark: #212121; + --bs-primary-rgb: 26, 35, 126; + --bs-font-sans-serif: 'Lato', sans-serif; } + +h1, h2, h3, h4, h5, h6, .h1, .h2, .h3, .h4, .h5, .h6 { + font-family: 'Poppins', sans-serif; + font-weight: 600; +} + body { - margin: 0; - font-family: 'Inter', sans-serif; - background: linear-gradient(45deg, var(--bg-color-start), var(--bg-color-end)); - color: var(--text-color); - display: flex; - justify-content: center; - align-items: center; - min-height: 100vh; - text-align: center; - overflow: hidden; - position: relative; + background-color: var(--bs-light); + color: var(--bs-dark); } + +.hero-section { + background: linear-gradient(to right, #1A237E, #2962FF); + padding: 4rem 0; + margin-bottom: -1px; /* Overlap to avoid gap */ +} + +.section-title { + color: var(--bs-primary); + font-weight: 700; +} + +.btn-primary { + background-color: #2962FF; + border-color: #2962FF; + transition: background-color 0.2s ease-in-out, border-color 0.2s ease-in-out; +} + +.btn-primary:hover { + background-color: #1A237E; + border-color: #1A237E; +} + +.card { + border: none; +} + +.card-header.bg-primary { + background-color: var(--bs-primary) !important; +} + +.table { + margin-bottom: 0; +} + +.table th { + font-weight: 600; + color: var(--bs-dark); +} + +.badge.bg-primary-soft { + color: var(--bs-primary); + background-color: rgba(var(--bs-primary-rgb), 0.1); +} \ No newline at end of file