Initial commit - landing page and roughing out
commit
6c6a0190e0
|
|
@ -0,0 +1,140 @@
|
|||
# Django #
|
||||
*.log
|
||||
*.pot
|
||||
*.pyc
|
||||
__pycache__
|
||||
db.sqlite3
|
||||
media
|
||||
|
||||
# Backup files #
|
||||
*.bak
|
||||
|
||||
# If you are using PyCharm #
|
||||
# User-specific stuff
|
||||
.idea/**/workspace.xml
|
||||
.idea/**/tasks.xml
|
||||
.idea/**/usage.statistics.xml
|
||||
.idea/**/dictionaries
|
||||
.idea/**/shelf
|
||||
|
||||
# AWS User-specific
|
||||
.idea/**/aws.xml
|
||||
|
||||
# Generated files
|
||||
.idea/**/contentModel.xml
|
||||
|
||||
# Sensitive or high-churn files
|
||||
.idea/**/dataSources/
|
||||
.idea/**/dataSources.ids
|
||||
.idea/**/dataSources.local.xml
|
||||
.idea/**/sqlDataSources.xml
|
||||
.idea/**/dynamic.xml
|
||||
.idea/**/uiDesigner.xml
|
||||
.idea/**/dbnavigator.xml
|
||||
|
||||
# Gradle
|
||||
.idea/**/gradle.xml
|
||||
.idea/**/libraries
|
||||
|
||||
# File-based project format
|
||||
*.iws
|
||||
|
||||
# IntelliJ
|
||||
out/
|
||||
|
||||
# JIRA plugin
|
||||
atlassian-ide-plugin.xml
|
||||
|
||||
# Python #
|
||||
*.py[cod]
|
||||
*$py.class
|
||||
|
||||
# Distribution / packaging
|
||||
.Python build/
|
||||
develop-eggs/
|
||||
dist/
|
||||
downloads/
|
||||
eggs/
|
||||
.eggs/
|
||||
lib/
|
||||
lib64/
|
||||
parts/
|
||||
sdist/
|
||||
var/
|
||||
wheels/
|
||||
*.whl
|
||||
*.egg-info/
|
||||
.installed.cfg
|
||||
*.egg
|
||||
*.manifest
|
||||
*.spec
|
||||
|
||||
# Installer logs
|
||||
pip-log.txt
|
||||
pip-delete-this-directory.txt
|
||||
|
||||
# Unit test / coverage reports
|
||||
htmlcov/
|
||||
.tox/
|
||||
.coverage
|
||||
.coverage.*
|
||||
.cache
|
||||
.pytest_cache/
|
||||
nosetests.xml
|
||||
coverage.xml
|
||||
*.cover
|
||||
.hypothesis/
|
||||
|
||||
# Jupyter Notebook
|
||||
.ipynb_checkpoints
|
||||
|
||||
# pyenv
|
||||
.python-version
|
||||
|
||||
# celery
|
||||
celerybeat-schedule.*
|
||||
|
||||
# SageMath parsed files
|
||||
*.sage.py
|
||||
|
||||
# Environments
|
||||
.env
|
||||
.venv
|
||||
env/
|
||||
venv/
|
||||
ENV/
|
||||
env.bak/
|
||||
venv.bak/
|
||||
|
||||
# mkdocs documentation
|
||||
/site
|
||||
|
||||
# mypy
|
||||
.mypy_cache/
|
||||
|
||||
# Sublime Text #
|
||||
*.tmlanguage.cache
|
||||
*.tmPreferences.cache
|
||||
*.stTheme.cache
|
||||
*.sublime-workspace
|
||||
*.sublime-project
|
||||
|
||||
# sftp configuration file
|
||||
sftp-config.json
|
||||
|
||||
# Package control specific files Package
|
||||
Control.last-run
|
||||
Control.ca-list
|
||||
Control.ca-bundle
|
||||
Control.system-ca-bundle
|
||||
GitHub.sublime-settings
|
||||
|
||||
# Visual Studio Code #
|
||||
.vscode/*
|
||||
!.vscode/settings.json
|
||||
!.vscode/tasks.json
|
||||
!.vscode/launch.json
|
||||
!.vscode/extensions.json
|
||||
.history
|
||||
|
||||
.ropeproject/*
|
||||
|
|
@ -0,0 +1,3 @@
|
|||
from django.contrib import admin
|
||||
|
||||
# Register your models here.
|
||||
|
|
@ -0,0 +1,6 @@
|
|||
from django.apps import AppConfig
|
||||
|
||||
|
||||
class DatavisConfig(AppConfig):
|
||||
default_auto_field = 'django.db.models.BigAutoField'
|
||||
name = 'datavis'
|
||||
|
|
@ -0,0 +1,3 @@
|
|||
from django.db import models
|
||||
|
||||
# Create your models here.
|
||||
|
|
@ -0,0 +1,45 @@
|
|||
{% extends "datavis/index.html" %} {% block content %}
|
||||
<main>
|
||||
<article>
|
||||
<h1>Summary</h1>
|
||||
<table>
|
||||
<thead>
|
||||
<tr>
|
||||
<th>Measurement Time</th>
|
||||
<th>Temperature (18")</th>
|
||||
<th>Temperature (36")</th>
|
||||
<th>Alerts</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td>2025-01-01 00:00</td>
|
||||
<td>35 C</td>
|
||||
<td>38 C</td>
|
||||
<td></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>2025-01-01 00:00</td>
|
||||
<td>35 C</td>
|
||||
<td>38 C</td>
|
||||
<td></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>2025-01-01 00:00</td>
|
||||
<td>35 C</td>
|
||||
<td>38 C</td>
|
||||
<td></td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</article>
|
||||
<article>
|
||||
<h1>Graphics</h1>
|
||||
<section>
|
||||
<svg viewBox="0 0 500 500">
|
||||
<rect x="0" width="500" y="0" height="500" fill="#aaa" />
|
||||
</svg>
|
||||
</section>
|
||||
</article>
|
||||
</main>
|
||||
{% endblock content %}
|
||||
|
|
@ -0,0 +1,11 @@
|
|||
{% load static %}
|
||||
<!doctype html>
|
||||
<html>
|
||||
<head>
|
||||
<title>Robot Hands</title>
|
||||
<script src="{% static 'marketing/tailwind.js' %}"></script>
|
||||
</head>
|
||||
<body>
|
||||
{% block content %} {% endblock %}
|
||||
</body>
|
||||
</html>
|
||||
|
|
@ -0,0 +1,3 @@
|
|||
from django.test import TestCase
|
||||
|
||||
# Create your tests here.
|
||||
|
|
@ -0,0 +1,8 @@
|
|||
from django.urls import path
|
||||
|
||||
from . import views
|
||||
|
||||
urlpatterns = [
|
||||
path("", views.index, name="dashboard_home"),
|
||||
path("livedemo", views.index, name="livedemo")
|
||||
]
|
||||
|
|
@ -0,0 +1,14 @@
|
|||
from django.shortcuts import render
|
||||
|
||||
# Create your views here.
|
||||
def index(request):
|
||||
context = {}
|
||||
return render(request, "datavis/dashboard_home.html", context)
|
||||
|
||||
def guest_demo(request):
|
||||
"""
|
||||
Loads safe public data and presents a read-only view into it
|
||||
"""
|
||||
context = {}
|
||||
|
||||
return render(request, "datavis/dashboard_home.html", context)
|
||||
|
|
@ -0,0 +1,22 @@
|
|||
#!/usr/bin/env python
|
||||
"""Django's command-line utility for administrative tasks."""
|
||||
import os
|
||||
import sys
|
||||
|
||||
|
||||
def main():
|
||||
"""Run administrative tasks."""
|
||||
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'roboteyes.settings')
|
||||
try:
|
||||
from django.core.management import execute_from_command_line
|
||||
except ImportError as exc:
|
||||
raise ImportError(
|
||||
"Couldn't import Django. Are you sure it's installed and "
|
||||
"available on your PYTHONPATH environment variable? Did you "
|
||||
"forget to activate a virtual environment?"
|
||||
) from exc
|
||||
execute_from_command_line(sys.argv)
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
main()
|
||||
|
|
@ -0,0 +1,3 @@
|
|||
from django.contrib import admin
|
||||
|
||||
# Register your models here.
|
||||
|
|
@ -0,0 +1,6 @@
|
|||
from django.apps import AppConfig
|
||||
|
||||
|
||||
class MarketingConfig(AppConfig):
|
||||
default_auto_field = 'django.db.models.BigAutoField'
|
||||
name = 'marketing'
|
||||
|
|
@ -0,0 +1,3 @@
|
|||
from django.db import models
|
||||
|
||||
# Create your models here.
|
||||
Binary file not shown.
|
After Width: | Height: | Size: 2.5 MiB |
Binary file not shown.
|
After Width: | Height: | Size: 2.8 KiB |
|
|
@ -0,0 +1,111 @@
|
|||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!-- Generator: Adobe Adobe Illustrator 24.2.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||
|
||||
<svg
|
||||
version="1.1"
|
||||
x="0px"
|
||||
y="0px"
|
||||
width="40"
|
||||
height="50"
|
||||
viewBox="0 0 40 50"
|
||||
xml:space="preserve"
|
||||
id="svg18"
|
||||
sodipodi:docname="Untitled-3 01 Artboard 1.svg"
|
||||
inkscape:version="1.3 (0e150ed, 2023-07-21)"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"><defs
|
||||
id="defs18" /><sodipodi:namedview
|
||||
id="namedview18"
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#000000"
|
||||
borderopacity="0.25"
|
||||
inkscape:showpageshadow="2"
|
||||
inkscape:pageopacity="0.0"
|
||||
inkscape:pagecheckerboard="0"
|
||||
inkscape:deskcolor="#d1d1d1"
|
||||
inkscape:zoom="4.1674204"
|
||||
inkscape:cx="25.555377"
|
||||
inkscape:cy="26.635182"
|
||||
inkscape:window-width="1312"
|
||||
inkscape:window-height="449"
|
||||
inkscape:window-x="0"
|
||||
inkscape:window-y="43"
|
||||
inkscape:window-maximized="0"
|
||||
inkscape:current-layer="svg18" /> <style
|
||||
type="text/css"
|
||||
id="style1"> .st0{fill:#FFFFFF;stroke:#376780;stroke-width:0.5;stroke-miterlimit:10;} .st1{fill:#E39032;} .st2{fill:#FFCC91;} .st3{fill:none;stroke:#E3A054;stroke-width:0.25;stroke-linecap:round;stroke-miterlimit:10;} .st4{fill:#E04338;} .st5{fill:#FFFFFF;stroke:#000000;stroke-width:0.25;stroke-miterlimit:10;} .st6{fill:#8F4403;stroke:#000000;stroke-width:0.25;stroke-miterlimit:10;} .st7{fill:#8F4403;stroke:#000000;stroke-width:0.25;stroke-linecap:round;stroke-miterlimit:10;} .st8{fill:none;stroke:#8F4403;stroke-width:0.25;stroke-linecap:round;stroke-miterlimit:10;} .st9{fill:none;stroke:#000000;stroke-width:0.25;stroke-linecap:round;stroke-miterlimit:10;} .st10{fill:#E08F89;} .st11{fill:#FFE4C4;} .st12{fill:none;stroke:#E8A558;stroke-width:0.25;stroke-miterlimit:10;} .st13{fill:#FFFFFF;} .st14{fill:#BABABA;} </style> <g
|
||||
id="Layer_1"
|
||||
transform="translate(-10.078177,-0.95982642)"> <path
|
||||
class="st1"
|
||||
d="m 44.61,44.39 c 2.61,-1.78 3.34,-3.03 0.98,-5.85 -0.8,-0.95 -4.7,-3.77 -3.94,-5.74 2.02,-5.18 2.27,-9.93 -1.24,-13.86 9.36,-5.26 -0.29,-19.93 -8.77,-6.5 2.06,-12.16 -11.35,-8.4 -8.81,-0.09 -2.88,-8.96 -12.07,1.51 -4.85,6.02 -2.23,0.82 -2.36,3.34 -1.46,4.14 -7.05,12.4 -4.79,14.62 1.27,11.4 0.71,-0.37 4.93,-2.55 5.69,0.47 0.09,0.36 -0.09,0.73 -0.37,0.97 -4.03,3.53 -3.77,8.97 -1.97,9.83 7.26,3.47 15.46,3.77 23.47,-0.79 z"
|
||||
id="path1" /> <g
|
||||
id="Layer_3"> <path
|
||||
class="st2"
|
||||
d="m 19.49,20.49 c -0.11,-0.31 -1.19,-0.21 -2.6,1.52 -1.48,1.82 -4.01,7.94 -4.31,8.91 -0.28,0.89 -0.84,3.46 0.53,4.16 1.37,0.7 3.7,-0.5 4.69,-1.19 1.14,-0.8 3.13,-1.2 4.01,-1.08 3.56,0.49 3.93,-1.43 4.42,-3.55 0.28,-1.22 -2.98,-3.94 -5.62,-3.64 -2.65,0.31 -0.74,-4.05 -1.12,-5.13 z"
|
||||
id="path2" /> </g> <path
|
||||
class="st3"
|
||||
d="m 24.41,30.11 c -1.05,-1.69 -4.24,-1.05 -5.95,0.65 -1.32,1.32 -1.17,3.48 -2.59,4.02"
|
||||
id="path3" /> <g
|
||||
id="Layer_4"> <path
|
||||
class="st4"
|
||||
d="m 19.46,18.39 c -2.48,0.19 -3.35,-1.73 -4.07,-3.47 -0.66,-1.59 0.65,-4.66 2.35,-5.59 0.91,-0.5 2.96,-0.94 3.93,0.69 1.39,2.35 0.64,0.65 0.89,-0.45 0.24,-1.04 0.35,-1.7 1.13,-2.79 0.78,-1.1 2.49,-2.09 3.52,-2.09 1.52,0 2.36,0.28 3.15,0.95 1.09,0.93 1.33,1.79 1.41,3.02 0.08,1.35 0.32,1.4 -0.03,3.14 -0.35,1.74 0.13,-0.32 1.63,-1.82 1.5,-1.5 2.08,-2.19 4.08,-2.81 1.56,-0.49 3.33,-0.27 4.66,1.07 1.33,1.33 1.69,1.33 2.01,3.46 0.21,1.38 0.18,2.36 -0.45,3.84 -0.74,1.74 -2.1,2.97 -3.14,3.33 -0.36,0.13 0.43,0.41 1.28,2.04 0.71,1.35 1.34,2.92 0.79,2.92 -1.19,0 -3.4,0.46 -3.79,-2.3 -0.52,-3.75 -4.46,0.89 -5.45,-2.57 C 32.4,15.5 29.64,16.03 29.8,15 c 0.27,-1.72 -1.71,-3.59 -2.81,-1.41 -0.38,0.76 -1.4,1.02 -4.01,0.52 -1.53,-0.29 -2.35,-0.86 -3.02,-0.03 -0.41,0.5 -0.26,1.34 0.22,2.66"
|
||||
id="path4" /> </g> <g
|
||||
id="Layer_2"> <path
|
||||
class="st6"
|
||||
d="m 29.39,25.45 c -0.34,-1.75 -1.1,-8.53 -3.43,-8.15 -2.61,0.43 -0.79,6.43 -0.21,8.77 1.3,0.52 3.44,-0.45 3.64,-0.62 z"
|
||||
id="path5" /> <path
|
||||
class="st7"
|
||||
d="M 27.76,25.63 C 27.25,23.32 26.73,21.01 26.22,18.7"
|
||||
id="path6" /> </g> <path
|
||||
class="st8"
|
||||
d="m 18.2,27.11 c -0.56,0.23 -1,0.72 -1.17,1.3"
|
||||
id="path7" /> <path
|
||||
class="st9"
|
||||
d="m 44.61,44.39 c 2.61,-1.78 3.34,-3.03 0.98,-5.85 -0.8,-0.95 -4.7,-3.77 -3.94,-5.74 2.02,-5.18 2.27,-9.93 -1.24,-13.86 9.36,-5.26 -0.29,-19.93 -8.77,-6.5 2.06,-12.16 -11.35,-8.4 -8.81,-0.09 -2.88,-8.96 -12.07,1.51 -4.85,6.02 -2.23,0.82 -2.36,3.34 -1.46,4.14 -7.05,12.4 -4.79,14.62 1.27,11.4 0.71,-0.37 4.93,-2.55 5.69,0.47 0.09,0.36 -0.09,0.73 -0.37,0.97 -4.03,3.53 -3.77,8.97 -1.97,9.83 7.26,3.47 15.46,3.77 23.47,-0.79 z"
|
||||
id="path8" /> </g> <g
|
||||
id="Layer_6"
|
||||
transform="translate(-10.078177,-0.95982642)"> <path
|
||||
class="st10"
|
||||
d="M 18.64,17.31 C 18.01,17.17 17.48,16.72 17.13,16.18 16.78,15.64 16.6,15 16.5,14.37 c -0.07,-0.41 -0.11,-0.82 -0.06,-1.23 0.08,-0.71 0.43,-1.38 0.96,-1.85"
|
||||
id="path9" /> <path
|
||||
class="st10"
|
||||
d="m 23.8,11.75 c -0.45,-2.12 0.54,-4.47 2.37,-5.63 0.32,-0.2 0.66,-0.37 1.02,-0.43 0.6,-0.11 1.24,0.06 1.76,0.39"
|
||||
id="path10" /> <path
|
||||
class="st10"
|
||||
d="m 32.93,13.02 c 1.26,-2.23 3.37,-3.95 5.8,-4.74 0.41,-0.13 0.84,-0.24 1.27,-0.23 1.04,0.03 2,0.87 2.18,1.89"
|
||||
id="path11" /> <path
|
||||
class="st11"
|
||||
d="m 18.64,21.76 c -0.31,-0.53 -7.05,10.75 -4.97,9.99 2.73,-0.99 0.73,-1.2 2.74,-5.2 0.15,-0.29 2.44,-4.42 2.23,-4.79 z"
|
||||
id="path12" /> <path
|
||||
class="st12"
|
||||
d="m 38.81,25.63 c 3.18,1.97 -0.19,4.35 -1.51,1.03 0.47,1.18 0.89,2.53 0.69,3.81 -0.95,1.53 -2.57,-0.7 -2.39,-2.05 0.72,3.95 -2.38,6.81 -3.78,2.74 -0.03,-0.08 -0.14,-0.07 -0.15,0.02 -0.14,4.61 -4.73,5.34 -3.83,-0.07"
|
||||
id="path13" /> <path
|
||||
class="st12"
|
||||
d="m 27.85,39.42 c 0.02,0.81 0.34,1.65 0.97,2.16 0.63,0.51 1.6,0.64 2.27,0.18 0.67,-0.46 0.87,-1.53 0.32,-2.13 0.66,1.44 2.2,2.43 3.79,2.43 0.77,0 1.65,-0.32 1.88,-1.06 0.22,-0.69 -0.22,-1.41 -0.64,-2 0.54,0.41 1.18,0.73 1.85,0.81 0.67,0.08 1.4,-0.1 1.9,-0.57 0.13,-0.12 0.24,-0.26 0.27,-0.43 0.03,-0.17 -0.02,-0.35 -0.09,-0.52 C 40.04,37.5 39.36,36.92 38.69,36.38 38.5,36.22 38.15,36.1 38.07,36.34"
|
||||
id="path14" /> <path
|
||||
class="st12"
|
||||
d="m 40.46,42.78 c 1.91,2.07 5.82,0.24 2.89,-2.09 3.65,2.48 2.24,-2.67 -0.25,-2.33"
|
||||
id="path15" /> <path
|
||||
class="st12"
|
||||
d="m 23.16,41.59 c -1.79,3.96 4.14,4.38 2.95,-0.04"
|
||||
id="path16" /> </g> <g
|
||||
id="Layer_5"
|
||||
transform="translate(-10.078177,-0.95982642)"> <circle
|
||||
class="st13"
|
||||
cx="28.040001"
|
||||
cy="19.75"
|
||||
r="1.05"
|
||||
id="circle16" /> <circle
|
||||
class="st13"
|
||||
cx="27.209999"
|
||||
cy="20.9"
|
||||
r="0.51999998"
|
||||
id="circle17" /> <path
|
||||
class="st14"
|
||||
d="m 31.34,19.4 c 0.37,1.43 0.22,2.99 -0.42,4.33 -0.25,0.53 -0.59,1.03 -1.08,1.35 -0.08,0.05 -0.18,0.1 -0.26,0.04 -0.04,-0.03 -0.06,-0.09 -0.07,-0.14 -0.08,-0.36 -0.13,-0.73 -0.15,-1.1 0,-0.07 0,-0.14 0.02,-0.21 0.08,-0.2 0.34,-0.23 0.52,-0.35 0.14,-0.09 0.23,-0.23 0.32,-0.37 0.28,-0.43 0.55,-0.86 0.74,-1.34 0.19,-0.48 0.28,-1 0.16,-1.5 -0.03,-0.14 -0.08,-0.29 -0.07,-0.44 0.03,-0.14 0.13,-0.3 0.29,-0.27 z"
|
||||
id="path17" /> <path
|
||||
class="st14"
|
||||
d="m 24.96,24.24 c -0.76,0.11 -1.48,-0.43 -1.89,-1.09 -0.13,-0.21 -0.24,-0.44 -0.41,-0.61 -0.17,-0.17 -0.44,-0.28 -0.67,-0.2 -0.12,0.48 0.11,0.97 0.38,1.38 0.7,1.04 1.8,1.84 3.04,2.06 -0.12,-0.41 -0.23,-0.82 -0.35,-1.22 -0.04,-0.13 -0.09,-0.27 -0.21,-0.31 -0.18,-0.06 -0.41,0.1 0.11,-0.01 z"
|
||||
id="path18" /> </g> </svg>
|
||||
|
After Width: | Height: | Size: 7.5 KiB |
File diff suppressed because one or more lines are too long
Binary file not shown.
|
After Width: | Height: | Size: 575 KiB |
|
|
@ -0,0 +1,109 @@
|
|||
{% extends "marketing/index.html" %}
|
||||
{% load static %}
|
||||
{% block content %}
|
||||
<main class="bg-[url({% static 'marketing/background.png' %})] bg-no-repeat bg-cover bg-black bg-center text-white">
|
||||
<div class="backdrop-blur-sm">
|
||||
<div class="flex flex-col lg:flex-row p-10 relative">
|
||||
<div class="absolute top-0 left-0 w-full h-full bg-black opacity-40 -z-10"></div>
|
||||
<article class="flex-1 flex flex-col items-center pb-8">
|
||||
<div class="lg:sticky lg:top-1/2 lg:translate-y-[-50%] text-center">
|
||||
<div class="flex flex-col gap-2">
|
||||
<img
|
||||
class="w-[40%] mx-auto"
|
||||
src="{% static 'marketing/w_solo.png' %}"
|
||||
></img>
|
||||
</div>
|
||||
<h1 class="text-6xl font-extralight block pb-3 ">
|
||||
Welcome to
|
||||
<br /> Wisconsin Windrows
|
||||
</h1>
|
||||
</div>
|
||||
</article>
|
||||
<article class="flex-1">
|
||||
<section class="h-[50lvh] lg:h-lvh lg:flex lg:flex-col lg:items-center lg:justify-center">
|
||||
<section class="text-3xl py-4">
|
||||
<b>Introducing Proboscus:</b> the remote temperature
|
||||
monitoring solution that will transform your monitoring
|
||||
process after a mass mortality event.
|
||||
</section>
|
||||
<section class="text-lg text-center p-8">
|
||||
<a
|
||||
href="{% url 'livedemo' %}"
|
||||
class="p-4 text-2xl rounded-2xl text-black bg-blue-400 cursor-pointer hover:bg-blue-300 mr-4"
|
||||
>
|
||||
See it in action
|
||||
</a>
|
||||
<span class="inline-block">or read on to learn more</span>
|
||||
</section>
|
||||
</section>
|
||||
|
||||
<section class="text-lg">
|
||||
<h2 class="text-3xl">Goodbye, manual measurement</h2>
|
||||
<div>
|
||||
Proboscus offers several critical improvements over the manual
|
||||
windrow measurement techniques used today.
|
||||
</div>
|
||||
<div>
|
||||
<ul>
|
||||
{% for item in bullet_items_measurement %}
|
||||
<li>
|
||||
<span class="font-bold pr-3">{{item.key}}:</span>
|
||||
<span>{{item.value}}</span>
|
||||
</li>
|
||||
{% endfor %}
|
||||
</ul>
|
||||
</div>
|
||||
<h2 class="text-3xl mt-3">Hello, no-click insights</h2>
|
||||
<div>
|
||||
<ul>
|
||||
{% for item in bullet_items_comfort %}
|
||||
<li>
|
||||
<span class="font-bold pr-3">{{item.key}}:</span>
|
||||
<span>{{item.value}}</span>
|
||||
</li>
|
||||
{% endfor %}
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<div>
|
||||
<h2 class="text-3xl mt-3">Additional Features:</h2>
|
||||
<ul>
|
||||
|
||||
{% for item in bullet_items_additional %}
|
||||
<li>
|
||||
<span class="font-bold pr-3">{{item.key}}:</span>
|
||||
<span>{{item.value}}</span>
|
||||
</li>
|
||||
{% endfor %}
|
||||
</ul>
|
||||
</div>
|
||||
</section>
|
||||
<section class="text-xl flex gap-2 items-center justify-center pt-4">
|
||||
<span>Interested?</span>
|
||||
<CallToActionButton onClick={props.onLogin} />
|
||||
</section>
|
||||
<section class="py-3">
|
||||
<div class="pb-3">
|
||||
Join our mailing list for updates! We'll keep you appraised of
|
||||
the latest developments and opportunities for deployment.
|
||||
</div>
|
||||
<input
|
||||
class="bg-gray-200 p-4 text-black"
|
||||
placeholder="joe@example.com"
|
||||
type="email"
|
||||
></input>
|
||||
<button class="p-4 text-black cursor-pointer bg-gray-200 hover:bg-gray-100">
|
||||
Submit
|
||||
</button>
|
||||
</section>
|
||||
</article>
|
||||
</div>
|
||||
<footer class="py-1 text-white text-center bg-black">
|
||||
Contact us at
|
||||
<a href="mailto:info@wisconsinwindrow.com" class="">
|
||||
info@wisconsinwindrow.com
|
||||
</a>
|
||||
</footer>
|
||||
</div>
|
||||
</main>
|
||||
{% endblock content %}
|
||||
|
|
@ -0,0 +1,11 @@
|
|||
{% load static %}
|
||||
<!doctype html>
|
||||
<html>
|
||||
<head>
|
||||
<title>Robot Hands</title>
|
||||
<script src="{% static 'marketing/tailwind.js' %}"></script>
|
||||
</head>
|
||||
<body>
|
||||
{% block content %} {% endblock %}
|
||||
</body>
|
||||
</html>
|
||||
|
|
@ -0,0 +1,3 @@
|
|||
from django.test import TestCase
|
||||
|
||||
# Create your tests here.
|
||||
|
|
@ -0,0 +1,7 @@
|
|||
from django.urls import path
|
||||
|
||||
from . import views
|
||||
|
||||
urlpatterns = [
|
||||
path("", views.index, name="index")
|
||||
]
|
||||
|
|
@ -0,0 +1,56 @@
|
|||
from django.http.response import HttpResponse
|
||||
from django.shortcuts import render
|
||||
|
||||
# Create your views here.
|
||||
def index(request):
|
||||
context = {
|
||||
"bullet_items_measurement": [
|
||||
{
|
||||
"key": "Time",
|
||||
"value": "No more manual measurements needed at each temperature site.",
|
||||
},
|
||||
{
|
||||
"key": "Safety",
|
||||
"value": "Reduces contact time with contaminated materials. Adds flexibility to scheduling visual inspections, pick optimal times for visual inspections.",
|
||||
},
|
||||
{
|
||||
"key": "Accuracy",
|
||||
"value": "Takes measurements at two depths in a consistent spot, with digital temperature readings that are sent to our servers. No transcription errors.",
|
||||
}
|
||||
],
|
||||
"bullet_items_comfort": [
|
||||
{
|
||||
"key": "Visibility",
|
||||
"value":
|
||||
"Realtime remote updates with dedicated data visualizations that help ensure things are on track. Share progress updates with stakeholders anywhere, anytime.",
|
||||
},
|
||||
{
|
||||
"key": "Comfort",
|
||||
"value": "Check on progress remotely, anytime, anywhere.",
|
||||
},
|
||||
{
|
||||
"key": "Ease of use",
|
||||
"value": "Set and forget system. We provide a service. No need to buy special tools, we ensure our probes arrive in time at your site, set up to work with your locations specific needs, and remove them when the job is done. ",
|
||||
},
|
||||
{
|
||||
"key": "Cost competitive",
|
||||
"value": "Our service is cost competitive to the current systems.",
|
||||
},
|
||||
],
|
||||
"bullet_items_additional": [
|
||||
{
|
||||
"key": "Data access",
|
||||
"value":
|
||||
"Laptop/Desktop data visualizations, downloadable data, mobile field maintenance site.",
|
||||
},
|
||||
{
|
||||
"key": "Alerting",
|
||||
"value": "Alert systems that allow you to quickly identify problematic temperature sites, and windrows, or even predictively let you know if there is a potential problem with a probe, which can simply be hot-swapped for a new one without fuss, and without losing data integrity.",
|
||||
},
|
||||
{
|
||||
"key": "Redundancy",
|
||||
"value": "Multiple redundant backups. The temperature data is collected and saved at the probe level, at the base-station level, and in our servers. Auditable results.",
|
||||
},
|
||||
]
|
||||
}
|
||||
return render(request, "marketing/homepage.html", context)
|
||||
|
|
@ -0,0 +1,4 @@
|
|||
{
|
||||
"venvPath": "..",
|
||||
"venv": "djangovenv"
|
||||
}
|
||||
|
|
@ -0,0 +1,16 @@
|
|||
"""
|
||||
ASGI config for roboteyes project.
|
||||
|
||||
It exposes the ASGI callable as a module-level variable named ``application``.
|
||||
|
||||
For more information on this file, see
|
||||
https://docs.djangoproject.com/en/5.2/howto/deployment/asgi/
|
||||
"""
|
||||
|
||||
import os
|
||||
|
||||
from django.core.asgi import get_asgi_application
|
||||
|
||||
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'roboteyes.settings')
|
||||
|
||||
application = get_asgi_application()
|
||||
|
|
@ -0,0 +1,124 @@
|
|||
"""
|
||||
Django settings for roboteyes project.
|
||||
|
||||
Generated by 'django-admin startproject' using Django 5.2.7.
|
||||
|
||||
For more information on this file, see
|
||||
https://docs.djangoproject.com/en/5.2/topics/settings/
|
||||
|
||||
For the full list of settings and their values, see
|
||||
https://docs.djangoproject.com/en/5.2/ref/settings/
|
||||
"""
|
||||
|
||||
from pathlib import Path
|
||||
|
||||
# Build paths inside the project like this: BASE_DIR / 'subdir'.
|
||||
BASE_DIR = Path(__file__).resolve().parent.parent
|
||||
|
||||
|
||||
# Quick-start development settings - unsuitable for production
|
||||
# See https://docs.djangoproject.com/en/5.2/howto/deployment/checklist/
|
||||
|
||||
# SECURITY WARNING: keep the secret key used in production secret!
|
||||
SECRET_KEY = 'django-insecure-(crrkqaq*k%(5cm)x4r1d#hwa5i#y9dys1d*3!r1%z1doqf1w^'
|
||||
|
||||
# SECURITY WARNING: don't run with debug turned on in production!
|
||||
DEBUG = True
|
||||
|
||||
ALLOWED_HOSTS = []
|
||||
|
||||
|
||||
# Application definition
|
||||
|
||||
INSTALLED_APPS = [
|
||||
'marketing.apps.MarketingConfig',
|
||||
'datavis.apps.DatavisConfig',
|
||||
'django.contrib.admin',
|
||||
'django.contrib.auth',
|
||||
'django.contrib.contenttypes',
|
||||
'django.contrib.sessions',
|
||||
'django.contrib.messages',
|
||||
'django.contrib.staticfiles',
|
||||
]
|
||||
|
||||
MIDDLEWARE = [
|
||||
'django.middleware.security.SecurityMiddleware',
|
||||
'django.contrib.sessions.middleware.SessionMiddleware',
|
||||
'django.middleware.common.CommonMiddleware',
|
||||
'django.middleware.csrf.CsrfViewMiddleware',
|
||||
'django.contrib.auth.middleware.AuthenticationMiddleware',
|
||||
'django.contrib.messages.middleware.MessageMiddleware',
|
||||
'django.middleware.clickjacking.XFrameOptionsMiddleware',
|
||||
]
|
||||
|
||||
ROOT_URLCONF = 'roboteyes.urls'
|
||||
|
||||
TEMPLATES = [
|
||||
{
|
||||
'BACKEND': 'django.template.backends.django.DjangoTemplates',
|
||||
'DIRS': [],
|
||||
'APP_DIRS': True,
|
||||
'OPTIONS': {
|
||||
'context_processors': [
|
||||
'django.template.context_processors.request',
|
||||
'django.contrib.auth.context_processors.auth',
|
||||
'django.contrib.messages.context_processors.messages',
|
||||
],
|
||||
},
|
||||
},
|
||||
]
|
||||
|
||||
WSGI_APPLICATION = 'roboteyes.wsgi.application'
|
||||
|
||||
|
||||
# Database
|
||||
# https://docs.djangoproject.com/en/5.2/ref/settings/#databases
|
||||
|
||||
DATABASES = {
|
||||
'default': {
|
||||
'ENGINE': 'django.db.backends.sqlite3',
|
||||
'NAME': BASE_DIR / 'db.sqlite3',
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
# Password validation
|
||||
# https://docs.djangoproject.com/en/5.2/ref/settings/#auth-password-validators
|
||||
|
||||
AUTH_PASSWORD_VALIDATORS = [
|
||||
{
|
||||
'NAME': 'django.contrib.auth.password_validation.UserAttributeSimilarityValidator',
|
||||
},
|
||||
{
|
||||
'NAME': 'django.contrib.auth.password_validation.MinimumLengthValidator',
|
||||
},
|
||||
{
|
||||
'NAME': 'django.contrib.auth.password_validation.CommonPasswordValidator',
|
||||
},
|
||||
{
|
||||
'NAME': 'django.contrib.auth.password_validation.NumericPasswordValidator',
|
||||
},
|
||||
]
|
||||
|
||||
|
||||
# Internationalization
|
||||
# https://docs.djangoproject.com/en/5.2/topics/i18n/
|
||||
|
||||
LANGUAGE_CODE = 'en-us'
|
||||
|
||||
TIME_ZONE = 'UTC'
|
||||
|
||||
USE_I18N = True
|
||||
|
||||
USE_TZ = True
|
||||
|
||||
|
||||
# Static files (CSS, JavaScript, Images)
|
||||
# https://docs.djangoproject.com/en/5.2/howto/static-files/
|
||||
|
||||
STATIC_URL = 'static/'
|
||||
|
||||
# Default primary key field type
|
||||
# https://docs.djangoproject.com/en/5.2/ref/settings/#default-auto-field
|
||||
|
||||
DEFAULT_AUTO_FIELD = 'django.db.models.BigAutoField'
|
||||
|
|
@ -0,0 +1,24 @@
|
|||
"""
|
||||
URL configuration for roboteyes project.
|
||||
|
||||
The `urlpatterns` list routes URLs to views. For more information please see:
|
||||
https://docs.djangoproject.com/en/5.2/topics/http/urls/
|
||||
Examples:
|
||||
Function views
|
||||
1. Add an import: from my_app import views
|
||||
2. Add a URL to urlpatterns: path('', views.home, name='home')
|
||||
Class-based views
|
||||
1. Add an import: from other_app.views import Home
|
||||
2. Add a URL to urlpatterns: path('', Home.as_view(), name='home')
|
||||
Including another URLconf
|
||||
1. Import the include() function: from django.urls import include, path
|
||||
2. Add a URL to urlpatterns: path('blog/', include('blog.urls'))
|
||||
"""
|
||||
from django.contrib import admin
|
||||
from django.urls import include, path
|
||||
|
||||
urlpatterns = [
|
||||
path('', include("marketing.urls")),
|
||||
path('dashboard/', include("datavis.urls")),
|
||||
path('admin/', admin.site.urls),
|
||||
]
|
||||
|
|
@ -0,0 +1,16 @@
|
|||
"""
|
||||
WSGI config for roboteyes project.
|
||||
|
||||
It exposes the WSGI callable as a module-level variable named ``application``.
|
||||
|
||||
For more information on this file, see
|
||||
https://docs.djangoproject.com/en/5.2/howto/deployment/wsgi/
|
||||
"""
|
||||
|
||||
import os
|
||||
|
||||
from django.core.wsgi import get_wsgi_application
|
||||
|
||||
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'roboteyes.settings')
|
||||
|
||||
application = get_wsgi_application()
|
||||
Loading…
Reference in New Issue