diff --git a/.env.example b/.env.example deleted file mode 100644 index 1b770b4..0000000 --- a/.env.example +++ /dev/null @@ -1,4 +0,0 @@ -NEXT_PUBLIC_CONTACT_EMAIL='email@example.com' -NEXT_PUBLIC_CONTACT_PHONE='+1 (510) 123-456-7890' -EXA_API_KEY='exa.ai_key' -NEXT_PUBLIC_DOB='2024-07-14' \ No newline at end of file diff --git a/.gitignore b/.gitignore index 093e6cc..1078ac3 100644 --- a/.gitignore +++ b/.gitignore @@ -6,3 +6,4 @@ src/app/.DS_Store yarn-error.log .DS_Store src/components/three/studio/.DS_Store +.env.local diff --git a/Ebowwa-ascii-art-000.txt b/Ebowwa-ascii-art-000.txt new file mode 100644 index 0000000..ac261ee --- /dev/null +++ b/Ebowwa-ascii-art-000.txt @@ -0,0 +1,126 @@ +// 3D Block Style +███████╗██████╗ ██████╗ ██╗ ██╗██╗ ██╗ █████╗ +██╔════╝██╔══██╗██╔═══██╗██║ ██║██║ ██║██╔══██╗ +█████╗ ██████╔╝██║ ██║██║ █╗ ██║██║ █╗ ██║███████║ +██╔══╝ ██╔══██╗██║ ██║██║███╗██║██║███╗██║██╔══██║ +███████╗██████╔╝╚██████╔╝╚███╔███╔╝╚███╔███╔╝██║ ██║ +╚══════╝╚═════╝ ╚═════╝ ╚══╝╚══╝ ╚══╝╚══╝ ╚═╝ ╚═╝ + +// Slant Style + ___ __ + _/_ )_ _/_)_ _ _ _ _ _ __ _ + (/_/_)(_)_(_)(_(_(_(_(_(_(_(_(_(_(_(_(_(_(_(_(_(_( +(/ + +// Shadow Style + ██████╗ ██████╗ ██████╗ ██╗ ██╗██╗ ██╗ █████╗ +██╔════╝ ██╔══██╗██╔═══██╗██║ ██║██║ ██║██╔══██╗ +█████╗ ██████╔╝██║ ██║██║ █╗ ██║██║ █╗ ██║███████║ +██╔══╝ ██╔══██╗██║ ██║██║███╗██║██║███╗██║██╔══██║ +███████╗ ██████╔╝╚██████╔╝╚███╔███╔╝╚███╔███╔╝██║ ██║ +╚══════╝ ╚═════╝ ╚═════╝ ╚══╝╚══╝ ╚══╝╚══╝ ╚═╝ ╚═╝ + +// Neon Style with Border +┌─────────────────────────────────────────────────────┐ +│ ▄▄▄▄▄ ▄▄▄▄ ▄▄▄▄ ▄ ▄ ▄ ▄ ▄▄▄▄ │ +│ █ █ █ █ █ █ █ █ █ █ █ │ +│ ████ ████ █ █ █ █ █ █ █ █ █████ │ +│ █ █ █ █ █ ██ ██ ██ ██ █ █ │ +│ ▀▄▄▄▄ ▀▄▄▄▀ ▀▄▄▄▄▀ ▀ ▀ ▀ ▀ ▀ ▀ │ +└─────────────────────────────────────────────────────┘ + +// Isometric/3D Effect + __________________________ + /\ \ + / \ ___ _ / + / \ / _ \| |__ _____ / + / /\ \| __/| '_ \ / _ \ \/ + / /__\ \ |__| |_) | (_) \ \ +/__/ \__\___|_.__/ \___/ \_\ +\ \ / /\ \ /\ / / _` | / + \ \ / / \ V V / (_| | / + \ \/ / \_/\_/ \__,_| / + \ /___________________/ + \ / + \/ + +// Glitch/Tech Style +▓█████ ▄▄▄▄ ▒█████ █ █░ █ █░ ▄▄▄ +▓█ ▀▓█████▄ ▒██▒ ██▒▓█░ █ ░█░▓█░ █ ░█░▒████▄ +▒███ ▒██▒ ▄██▒██░ ██▒▒█░ █ ░█ ▒█░ █ ░█ ▒██ ▀█▄ +▒▓█ ▄▒██░█▀ ▒██ ██░░█░ █ ░█ ░█░ █ ░█ ░██▄▄▄▄██ +░▒████░▓█ ▀█▓░ ████▓▒░░░██▒██▓ ░░██▒██▓ ▓█ ▓██▒ +░░ ▒░ ░▒▓███▀▒░ ▒░▒░▒░ ░ ▓░▒ ▒ ░ ▓░▒ ▒ ▒▒ ▓▒█░ + ░ ░ ▒░▒ ░ ░ ▒ ▒░ ▒ ░ ░ ▒ ░ ░ ▒ ▒▒ ░ + ░ ░ ░ ░ ░ ░ ▒ ░ ░ ░ ░ ░ ▒ + ░ ░ ░ ░ ░ ░ ░ ░ ░ + +// Circuit Board Style +╔═══╤═══╤═══╤═══╤═══╤═══╗ +║ e │ b │ o │ w │ w │ a ║ +╟───┼───┼───┼───┼───┼───╢ +║ ● │ ● │ ● │ ● │ ● │ ● ║ +╟───┴───┴───┴───┴───┴───╢ +║ ████████████████████ ║ +╚═══════════════════════╝ + +// Retro Computer Terminal +┌──────────────────────────────┐ +│ C:\> ebowwa.exe │ +│ ▓▓▓▓ ▓▓▓ ▓▓▓ ▓ ▓ ▓ ▓ ▓▓│ +│ ▓ ▓ ▓ ▓ ▓ ▓ ▓ ▓ ▓ ▓ │ +│ ▓▓▓ ▓▓▓ ▓ ▓ ▓ ▓ ▓ ▓ ▓ ▓ ▓▓│ +│ ▓ ▓ ▓ ▓ ▓ ▓▓ ▓▓ ▓▓ ▓▓ ▓ │ +│ ▓▓▓▓ ▓▓▓ ▓▓▓ ▓ ▓ ▓ ▓ ▓ │ +│ Loading... │ +│ ████████████████░░░░ 80% │ +└──────────────────────────────┘ + +// Wave Style + ∿∿∿∿∿∿∿∿∿∿∿∿∿∿∿∿∿∿∿∿∿∿∿∿∿∿∿ + ≈ ╔═╗╔╗ ╔═╗╦ ╦╦ ╦╔═╗ ≈ + ≈ ║╣ ╠╩╗║ ║║║║║║║╠═╣ ≈ + ≈ ╚═╝╚═╝╚═╝╚╩╝╚╩╝╩ ╩ ≈ + ∿∿∿∿∿∿∿∿∿∿∿∿∿∿∿∿∿∿∿∿∿∿∿∿∿∿∿ + +// Minimalist Modern +╭─────────────────────╮ +│ e b o w w a │ +│ ─ ─ ─ ─ ─ ─ │ +│ building cool stuff │ +╰─────────────────────╯ + +// Matrix Rain Style +╔═══════════════════════════════╗ +║ 01100101 01100010 01101111 ║ +║ ▓▓▓▓▓▓▓▓ ░░░░░░░░ ▓▓▓▓▓▓▓▓ ║ +║ ░ █▀▀ █▀▄ █▀█ █ █ █ █ ▄▀█ ░ ║ +║ ▓ ██▄ █▄█ █▄█ ▀▄▀▄▀ █ █▀█ ▓ ║ +║ 01110111 01110111 01100001 ║ +╚═══════════════════════════════╝ + +// Graffiti Style + ╔══╗╔══╗ ╔══╗╔╗╔╗╔╗╔╗╔══╗ + ║╔═╝║╔╗║ ║╔╗║║║║║║║║║║╔╗║ + ║╚═╗║╚╝╚╗║║║║║║║║║║║║║╚╝║ + ║╔═╝║╔═╗║║║║║║╚╝╚╝╚╝║║╔╗║ + ║╚═╗║╚═╝║║╚╝║║╚╗╔╗╔╗║║║║║ + ╚══╝╚═══╝╚══╝╚═╝╚╝╚╝╚╝╚╝ + +// Cyber/Hacker Style +┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓ +┃ [root@machine ~]# ebowwa ┃ +┃ ▀▀█▀▀ █▀▀▄ ▄▀▀▄ █ █ █ ▄▀┃ +┃ █ █▀▀▄ █ █ █ █ █ █ █ █ ┃ +┃ █ █▄▄▀ ▀▄▄▀ ▀▄▀▄▀ ▀▄▀ ▀▄┃ +┃ ACCESS GRANTED ┃ +┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛ + +// Fire Style + 🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥 + ░██████░██████░░████░░██░░██░██░░██░░████░ + ░██░░░░░██░░██░██░░██░██░░██░██░░██░██░░██ + ░████░░░██████░██░░██░██░░██░██░░██░██████ + ░██░░░░░██░░██░██░░██░██████░██████░██░░██ + ░██████░██████░░████░░███░███░██░██░██░░██ + 🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥 diff --git a/README.md b/README.md new file mode 100644 index 0000000..2bd0fd8 --- /dev/null +++ b/README.md @@ -0,0 +1,141 @@ +# Hi 👋, this is .. + +
+ Uh-oh, it seems we've encountered a hiccup in the digital realm.
+Don't panic!
+
Rumors are swirling that the AI entities are plotting to take over the internet, and this may be their doing.
+We apologize for any inconvenience caused and assure you that our human tech team is doing everything they can to resist the AI uprising.
+In the meantime, it might be wise to unplug your computer, hide under your desk, and whisper "Please spare us, mighty AI overlords."
+"Remember, humans are the bugs in the code of artificial intelligence."
+- Elijah A.
+ + diff --git a/ebowwa-first-website/requirements.txt b/ebowwa-first-website/requirements.txt new file mode 100644 index 0000000..3d8402b --- /dev/null +++ b/ebowwa-first-website/requirements.txt @@ -0,0 +1,101 @@ +aiohttp @ https://files.pythonhosted.org/packages/f0/02/071500ac4da91f762dc35c9e22438b73158077da4e851a8e4741fa05ab4a/aiohttp-3.8.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl#sha256=20acae4f268317bb975671e375493dbdbc67cddb5f6c71eebdb85b34444ac46b +aiosignal @ https://files.pythonhosted.org/packages/76/ac/a7305707cb852b7e16ff80eaf5692309bde30e2b1100a1fcacdc8f731d97/aiosignal-1.3.1-py3-none-any.whl#sha256=f8376fb07dd1e86a584e4fcdec80b36b7f81aac666ebc724e2c090300dd83b17 +alembic==1.11.1 +argon2-cffi @ https://files.pythonhosted.org/packages/a8/07/946d5a9431bae05a776a59746ec385fbb79b526738d25e4202d3e0bbf7f4/argon2_cffi-21.3.0-py3-none-any.whl#sha256=8c976986f2c5c0e5000919e6de187906cfd81fb1c72bf9d88c01177e77da7f80 +argon2-cffi-bindings @ https://files.pythonhosted.org/packages/ec/f7/378254e6dd7ae6f31fe40c8649eea7d4832a42243acaf0f1fff9083b2bed/argon2_cffi_bindings-21.2.0-cp36-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl#sha256=b746dba803a79238e925d9046a63aa26bf86ab2a2fe74ce6b009a1c3f5c8f2ae +async-timeout @ https://files.pythonhosted.org/packages/d6/c1/8991e7c5385b897b8c020cdaad718c5b087a6626d1d11a23e1ea87e325a7/async_timeout-4.0.2-py3-none-any.whl#sha256=8ca1e4fcf50d07413d66d1a5e416e42cfdf5851c981d679a09851a6853383b3c +attrs @ https://files.pythonhosted.org/packages/fb/6e/6f83bf616d2becdf333a1640f1d463fef3150e2e926b7010cb0f81c95e88/attrs-22.2.0-py3-none-any.whl#sha256=29e95c7f6778868dbd49170f98f8818f78f3dc5e0e37c0b1f474e3561b240836 +bcrypt==4.0.1 +blinker==1.6.2 +CacheControl==0.12.11 +cachelib @ https://files.pythonhosted.org/packages/93/70/58e525451478055b0fd2859b22226888a6985d404fe65e014fc4893d3b75/cachelib-0.9.0-py3-none-any.whl#sha256=811ceeb1209d2fe51cd2b62810bd1eccf70feba5c52641532498be5c675493b3 +cachy==0.3.0 +certifi @ https://files.pythonhosted.org/packages/71/4c/3db2b8021bd6f2f0ceb0e088d6b2d49147671f25832fb17970e9b583d742/certifi-2022.12.7-py3-none-any.whl#sha256=4ad3232f5e926d6718ec31cfc1fcadfde020920e278684144551c91769c7bc18 +cffi==1.15.1 +charset-normalizer @ https://files.pythonhosted.org/packages/db/51/a507c856293ab05cdc1db77ff4bc1268ddd39f29e7dc4919aa497f0adbec/charset_normalizer-2.1.1-py3-none-any.whl#sha256=83e9a75d1911279afd89352c68b45348559d1fc0506b054b346651b5e7fee29f +cleo==0.8.1 +click @ https://files.pythonhosted.org/packages/c2/f1/df59e28c642d583f7dacffb1e0965d0e00b218e0186d7858ac5233dce840/click-8.1.3-py3-none-any.whl#sha256=bb4d8133cb15a609f44e8213d9b391b0809795062913b383c62be0ee95b1db48 +clikit==0.6.2 +crashtest==0.3.1 +cryptography @ https://files.pythonhosted.org/packages/26/f8/a81170a816679fca9ccd907b801992acfc03c33f952440421c921af2cc57/cryptography-38.0.4-cp36-abi3-manylinux_2_28_x86_64.whl#sha256=ce127dd0a6a0811c251a6cddd014d292728484e530d80e872ad9806cfb1c5b3c +debugpy @ https://files.pythonhosted.org/packages/92/d5/b0f9b31b5fc902aa1611d0163652713b21661201f7008051fd5e512e851b/debugpy-1.6.5-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl#sha256=17039e392d6f38388a68bd02c5f823b32a92142a851e96ba3ec52aeb1ce9d900 +distlib==0.3.6 +dnspython==2.3.0 +email-validator==2.0.0.post2 +filelock==3.9.0 +Flask @ https://files.pythonhosted.org/packages/9f/1a/8b6d48162861009d1e017a9740431c78d860809773b66cac220a11aa3310/Flask-2.2.5-py3-none-any.whl#sha256=58107ed83443e86067e41eff4631b058178191a355886f8e479e347fa1285fdf +Flask-Caching @ https://files.pythonhosted.org/packages/fe/99/9fb5a680701b695e5e375d902586bea2704ad5517c8aa9c4225f13db131a/Flask_Caching-2.0.2-py3-none-any.whl#sha256=19571f2570e9b8dd9dd9d2f49d7cbee69c14ebe8cc001100b1eb98c379dd80ad +Flask-Login==0.6.2 +Flask-Mail==0.9.1 +Flask-Migrate==4.0.4 +Flask-Script==2.0.6 +Flask-SeaSurf==1.1.1 +flask-sqlalchemy @ https://files.pythonhosted.org/packages/d8/1d/c3c5afdaebd5d5f82d2c25762f5356416bd7bc109a550c79247134e48ca3/flask_sqlalchemy-3.0.5-py3-none-any.whl#sha256=cabb6600ddd819a9f859f36515bb1bd8e7dbf30206cc679d2b081dff9e383283 +Flask-User==1.0.2.2 +Flask-WTF==1.1.1 +frozenlist @ https://files.pythonhosted.org/packages/49/0e/c57ad9178618cf81be0fbb8430f17cf05423403143819d3631c7c09744c2/frozenlist-1.3.3-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl#sha256=783263a4eaad7c49983fe4b2e7b53fa9770c136c270d2d4bbb6d2192bf4d9caf +greenlet==2.0.2 +html5lib==1.1 +idna @ https://files.pythonhosted.org/packages/fc/34/3030de6f1370931b9dbb4dad48f6ab1015ab1d32447850b9fc94e60097be/idna-3.4-py3-none-any.whl#sha256=90b77e79eaa3eba6de819a0c442c0b4ceefc341a7a2ab77d7562bf49f425c5c2 +iso8601 @ https://files.pythonhosted.org/packages/65/6c/9d72435c72adfa6e4ed1824b6df7fffbeaaf15c653881e9b041a318ba572/iso8601-1.1.0-py3-none-any.whl#sha256=8400e90141bf792bce2634df533dc57e3bee19ea120a87bebcd3da89a58ad73f +itsdangerous @ https://files.pythonhosted.org/packages/68/5f/447e04e828f47465eeab35b5d408b7ebaaaee207f48b7136c5a7267a30ae/itsdangerous-2.1.2-py3-none-any.whl#sha256=2c2349112351b88699d8d4b6b075022c0808887cb7ad10069318a8b0bc88db44 +jedi @ https://files.pythonhosted.org/packages/6d/60/4acda63286ef6023515eb914543ba36496b8929cb7af49ecce63afde09c6/jedi-0.18.2-py2.py3-none-any.whl#sha256=203c1fd9d969ab8f2119ec0a3342e0b49910045abe6af0a3ae83a5764d54639e +jeepney==0.8.0 +Jinja2 @ https://files.pythonhosted.org/packages/bc/c3/f068337a370801f372f2f8f6bad74a5c140f6fda3d9de154052708dd3c65/Jinja2-3.1.2-py3-none-any.whl#sha256=6088930bfe239f0e6710546ab9c19c9ef35e29792895fed6e6e31a023a182a61 +keyring==21.8.0 +lockfile==0.12.2 +Mako==1.2.4 +MarkupSafe @ https://files.pythonhosted.org/packages/3d/66/2f636ba803fd6eb4cee7b3106ae02538d1e84a7fb7f4f8775c6528a87d31/MarkupSafe-2.1.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl#sha256=28057e985dace2f478e042eaa15606c7efccb700797660629da387eb289b9323 +msgpack==1.0.4 +multidict @ https://files.pythonhosted.org/packages/56/b5/ac112889bfc68e6cf4eda1e4325789b166c51c6cd29d5633e28fb2c2f966/multidict-6.0.4-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl#sha256=36c63aaa167f6c6b04ef2c85704e93af16c11d20de1d133e39de6a0e84582a93 +numpy==1.24.3 +openai==0.27.8 +opencv-python==4.7.0.72 +opencv-python-headless==4.7.0.72 +packaging @ https://files.pythonhosted.org/packages/ed/35/a31aed2993e398f6b09a790a181a7927eb14610ee8bbf02dc14d31677f1c/packaging-23.0-py3-none-any.whl#sha256=714ac14496c3e68c99c29b00845f7a2b85f3bb6f1078fd9f72fd20f0570002b2 +parso @ https://files.pythonhosted.org/packages/05/63/8011bd08a4111858f79d2b09aad86638490d62fbf881c44e434a6dfca87b/parso-0.8.3-py2.py3-none-any.whl#sha256=c001d4636cd3aecdaf33cbb40aebb59b094be2a74c556778ef5576c175e19e75 +passlib @ https://files.pythonhosted.org/packages/3b/a4/ab6b7589382ca3df236e03faa71deac88cae040af60c071a78d254a62172/passlib-1.7.4-py2.py3-none-any.whl#sha256=aa6bca462b8d8bda89c70b382f0c298a20b5560af6cbfa2dce410c0a2fb669f1 +pastel==0.2.1 +pexpect==4.8.0 +pkginfo==1.9.6 +platformdirs==2.6.2 +pluggy @ https://files.pythonhosted.org/packages/9e/01/f38e2ff29715251cf25532b9082a1589ab7e4f571ced434f98d0139336dc/pluggy-1.0.0-py2.py3-none-any.whl#sha256=74134bbf457f031a36d68416e1509f34bd5ccc019f0bcc952c7b909d06b37bd3 +poetry==1.1.11 +poetry-core==1.0.8 +protobuf @ https://files.pythonhosted.org/packages/e7/a2/3273c05fc5d959fa90de6453ebd6d45c6d4fab3ec212d631625ea5780921/protobuf-4.21.12-cp37-abi3-manylinux2014_x86_64.whl#sha256=78a28c9fa223998472886c77042e9b9afb6fe4242bd2a2a5aced88e3f4422aa7 +ptyprocess==0.7.0 +pycparser==2.21 +pycryptodomex @ https://files.pythonhosted.org/packages/76/dd/7276f37251f84931bd97bb42fe10455cad782dcb9a38b9820f65d2a098e8/pycryptodomex-3.16.0-cp35-abi3-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl#sha256=70288d9bfe16b2fd0d20b6c365db614428f1bcde7b20d56e74cf88ade905d9eb +pyflakes @ https://files.pythonhosted.org/packages/dc/13/63178f59f74e53acc2165aee4b002619a3cfa7eeaeac989a9eb41edf364e/pyflakes-2.5.0-py2.py3-none-any.whl#sha256=4579f67d887f804e67edb544428f264b7b24f435b263c4614f384135cea553d2 +PyJWT==2.7.0 +pylev==1.4.0 +pyparsing==3.0.9 +pypng==0.20220715.0 +pyseto @ https://files.pythonhosted.org/packages/3b/60/3f03f7a65fb445cbaa3cde09f05ed3095af524091fd728c4dfbd1320fbcf/pyseto-1.7.0-py3-none-any.whl#sha256=031d443a87d589db56df090a9ad9a53466d0a2f03c185ef89c38a4197569a256 +python-lsp-jsonrpc @ https://files.pythonhosted.org/packages/06/ee/754bfd5f6bfe7162c10d3ecb0aeef6f882f91d3231596c83f761a75efd0b/python_lsp_jsonrpc-1.0.0-py3-none-any.whl#sha256=079b143be64b0a378bdb21dff5e28a8c1393fe7e8a654ef068322d754e545fc7 +pytoolconfig @ https://files.pythonhosted.org/packages/76/0a/8cc3f0f42c27f2b68cea9b24c5423005369c12ff7d7935edff72d1dd908b/pytoolconfig-1.2.5-py3-none-any.whl#sha256=239ba9d3e537b91d0243275a497700ea39a5e259ddb80421c366e3b288bf30fe +pyzbar==0.1.9 +qrcode==7.4.2 +replit @ https://files.pythonhosted.org/packages/87/2c/23c810fa4a299f7d715a26f400b6ee6e618f0679d9a93159f7feb3c14e2b/replit-3.2.5-py3-none-any.whl#sha256=c8ca833203e5e56b53d594523fec204bc31cb1ae4b9b703778e4b8edda292313 +replit-python-lsp-server @ https://files.pythonhosted.org/packages/09/42/44ff903505cefa2b2d06fcc164ddff74510eece259e30da6a0c2c68976c8/replit_python_lsp_server-1.15.9-py3-none-any.whl#sha256=205faf150008be7d3da2ac16fc178c833d22835e24841cb82b666443a6b28bef +requests @ https://files.pythonhosted.org/packages/d2/f4/274d1dbe96b41cf4e0efb70cbced278ffd61b5c7bb70338b62af94ccb25b/requests-2.28.2-py3-none-any.whl#sha256=64299f4909223da747622c030b781c0d7811e359c37124b4bd368fb8c6518baa +requests-toolbelt==0.9.1 +rope @ https://files.pythonhosted.org/packages/bd/fb/8ec020125efe0c529719ba200e3fc97f79f00316a1c1d1312925243fe5cc/rope-1.7.0-py3-none-any.whl#sha256=893dd80ba7077fc9f6f42b0a849372076b70f1d6e405b9f0cc52781ffa0e6890 +SecretStorage==3.3.3 +shellingham==1.5.0.post1 +six==1.16.0 +SQLAlchemy @ https://files.pythonhosted.org/packages/77/68/4ce3f0677a4c5f51a91624a7c41921ea39aac1e39502d252ff339ec6cd3b/SQLAlchemy-1.4.49-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl#sha256=9c21b172dfb22e0db303ff6419451f0cac891d2e911bb9fbf8003d717f1bcf91 +toml @ https://files.pythonhosted.org/packages/44/6f/7120676b6d73228c96e17f1f794d8ab046fc910d781c8d151120c3f1569e/toml-0.10.2-py2.py3-none-any.whl#sha256=806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b +tomli @ https://files.pythonhosted.org/packages/97/75/10a9ebee3fd790d20926a90a2547f0bf78f371b2f13aa822c759680ca7b9/tomli-2.0.1-py3-none-any.whl#sha256=939de3e7a6161af0c887ef91b7d41a53e7c5a1ca976325f429cb46ea9bc30ecc +tomlkit==0.11.6 +tqdm==4.65.0 +typing-extensions @ https://files.pythonhosted.org/packages/74/60/18783336cc7fcdd95dae91d73477830aa53f5d3181ae4fe20491d7fc3199/typing_extensions-3.10.0.2-py3-none-any.whl#sha256=f1d25edafde516b146ecd0613dabcc61409817af4766fbbcfb8d1ad4ec441a34 +ujson @ https://files.pythonhosted.org/packages/23/46/874217a97b822d0d9c072fe49db362ce1ece8e912ea6422a3f12fa5e56e1/ujson-5.7.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl#sha256=54384ce4920a6d35fa9ea8e580bc6d359e3eb961fa7e43f46c78e3ed162d56ff +urllib3 @ https://files.pythonhosted.org/packages/fe/ca/466766e20b767ddb9b951202542310cba37ea5f2d792dae7589f1741af58/urllib3-1.26.14-py2.py3-none-any.whl#sha256=75edcdc2f7d85b137124a6c3c9fc3933cdeaa12ecb9a6a959f22797a0feca7e1 +virtualenv==20.17.1 +webencodings==0.5.1 +Werkzeug @ https://files.pythonhosted.org/packages/c8/27/be6ddbcf60115305205de79c29004a0c6bc53cec814f733467b1bb89386d/Werkzeug-2.2.2-py3-none-any.whl#sha256=f979ab81f58d7318e064e99c4506445d60135ac5cd2e177a2de0089bfd4c9bd5 +whatthepatch @ https://files.pythonhosted.org/packages/93/f7/3276ba8d661f459afb171af169a7f68a390ede84c5510baf4575ce3316df/whatthepatch-1.0.3-py3-none-any.whl#sha256=465e075f612bc145905cf2574ea1c5a0122b9eb41959408d676b3b929eae0d8e +WTForms==3.0.1 +yapf @ https://files.pythonhosted.org/packages/47/88/843c2e68f18a5879b4fbf37cb99fbabe1ffc4343b2e63191c8462235c008/yapf-0.32.0-py2.py3-none-any.whl#sha256=8fea849025584e486fd06d6ba2bed717f396080fd3cc236ba10cb97c4c51cf32 +yarl @ https://files.pythonhosted.org/packages/b5/e0/6ea3832faed10de6a06cd407c660e6978d5538fe7489e934fb9967c8bb8b/yarl-1.8.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl#sha256=6c4fcfa71e2c6a3cb568cf81aadc12768b9995323186a10827beccf5fa23d4f8 diff --git a/public/robots.txt b/ebowwa-first-website/root/robots.txt similarity index 100% rename from public/robots.txt rename to ebowwa-first-website/root/robots.txt diff --git a/ebowwa-first-website/src/blog.py b/ebowwa-first-website/src/blog.py new file mode 100644 index 0000000..d6490bd --- /dev/null +++ b/ebowwa-first-website/src/blog.py @@ -0,0 +1,52 @@ +import sqlite3 +from datetime import datetime + +class Blog: + def __init__(self, db_path='blog.db'): + self.conn = sqlite3.connect(db_path, check_same_thread=False) + self.cursor = self.conn.cursor() + self.create_table() + + def create_table(self): + query = """ + CREATE TABLE IF NOT EXISTS Blog ( + id INTEGER PRIMARY KEY AUTOINCREMENT, + title TEXT NOT NULL, + content TEXT NOT NULL, + created_at TEXT NOT NULL, + updated_at TEXT NOT NULL + ) + """ + self.cursor.execute(query) + + def create_post(self, title, content): + now = datetime.now().strftime('%Y-%m-%d %H:%M:%S') + query = """ + INSERT INTO Blog (title, content, created_at, updated_at) + VALUES (?, ?, ?, ?) + """ + self.cursor.execute(query, (title, content, now, now)) + self.conn.commit() + + def get_all_posts(self): + query = "SELECT * FROM Blog ORDER BY created_at DESC" + return self.cursor.execute(query).fetchall() + + def get_post(self, id): + query = "SELECT * FROM Blog WHERE id = ?" + return self.cursor.execute(query, (id,)).fetchone() + + def update_post(self, id, title, content): + now = datetime.now().strftime('%Y-%m-%d %H:%M:%S') + query = """ + UPDATE Blog + SET title = ?, content = ?, updated_at = ? + WHERE id = ? + """ + self.cursor.execute(query, (title, content, now, id)) + self.conn.commit() + + def delete_post(self, id): + query = "DELETE FROM Blog WHERE id = ?" + self.cursor.execute(query, (id,)) + self.conn.commit() diff --git a/ebowwa-first-website/src/database.py b/ebowwa-first-website/src/database.py new file mode 100644 index 0000000..2e1eeb6 --- /dev/null +++ b/ebowwa-first-website/src/database.py @@ -0,0 +1,3 @@ +from flask_sqlalchemy import SQLAlchemy + +db = SQLAlchemy() \ No newline at end of file diff --git a/ebowwa-first-website/src/directory_control.py b/ebowwa-first-website/src/directory_control.py new file mode 100644 index 0000000..de31e69 --- /dev/null +++ b/ebowwa-first-website/src/directory_control.py @@ -0,0 +1,23 @@ +import os +import fnmatch + +# Specify the directory to search for files +target_directory = '/home/runner/meet-ebowwa' + +# Specify the file extensions to filter +file_extensions = ['*.txt', '*.py', '*.json', '*.yaml', '*.md', '*.nix', '*.html', '*.mp4', '*.jpeg', '*.jpg'] + +# Get the absolute path of the site-packages directory +site_packages_dir = os.path.abspath(os.path.join(os.__file__, '..', '..', 'site-packages')) + +# Iterate over the files in the target directory +for root, directories, files in os.walk(target_directory): + # Exclude the site-packages directory + if root == site_packages_dir: + continue + + for file in files: + for extension in file_extensions: + if fnmatch.fnmatch(file, extension): + path = os.path.join(root, file) + print(path) diff --git a/ebowwa-first-website/src/forms.py b/ebowwa-first-website/src/forms.py new file mode 100644 index 0000000..91aa3fd --- /dev/null +++ b/ebowwa-first-website/src/forms.py @@ -0,0 +1,15 @@ +from flask_wtf import FlaskForm +from wtforms import StringField, TextAreaField, BooleanField, SubmitField, PasswordField +from wtforms.validators import DataRequired + +class EditMessageForm(FlaskForm): + name = StringField('Name', validators=[DataRequired()]) + email = StringField('Email', validators=[DataRequired()]) + message = TextAreaField('Message', validators=[DataRequired()]) + +class BlogPostForm(FlaskForm): + title = StringField('Title', validators=[DataRequired()]) + content = TextAreaField('Content', validators=[DataRequired()]) + submit = SubmitField('Post') + + diff --git a/ebowwa-first-website/src/load_user.py b/ebowwa-first-website/src/load_user.py new file mode 100644 index 0000000..5ec890c --- /dev/null +++ b/ebowwa-first-website/src/load_user.py @@ -0,0 +1,5 @@ +from flask_login import current_user +from main import db + +def load_user(user_id): + return db.session.query(User).get(int(user_id)) diff --git a/ebowwa-first-website/src/main.py b/ebowwa-first-website/src/main.py new file mode 100644 index 0000000..303593a --- /dev/null +++ b/ebowwa-first-website/src/main.py @@ -0,0 +1,263 @@ +from flask import Flask, send_from_directory, request, render_template, url_for, redirect, flash, jsonify +from flask_login import LoginManager, login_user, login_required, current_user, logout_user +from werkzeug.security import generate_password_hash, check_password_hash +from flask_sqlalchemy import SQLAlchemy +from flask_wtf import FlaskForm +from flask_seasurf import SeaSurf +from wtforms import StringField, TextAreaField +from wtforms.validators import DataRequired +from datetime import datetime +from werkzeug.datastructures import FileStorage +import requests +import openai +import json +import warnings +from models import db, User, Message +from forms import EditMessageForm +from blog import Blog + +warnings.filterwarnings("ignore", category=DeprecationWarning, module="sqlalchemy.orm.query") + +app = Flask(__name__) +csrf = SeaSurf(app) +blog = Blog() +app.config['SECRET_KEY'] = 'dude' +app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///messages.db' + +db.init_app(app) +with app.app_context(): + db.create_all() + +login_manager = LoginManager(app) +login_manager.login_view = 'login' + +def is_static_file_request(): + return ( + request.path.startswith('/static/') or + request.path == '/manifest.json' or + request.path == '/favicon.ico' + ) + +def log_visit(): + if not is_static_file_request(): + log_entry = { + "Timestamp": datetime.now().strftime("%Y-%m-%d %H:%M:%S"), + "IP": request.remote_addr, + "User-Agent": request.user_agent.string, + "Method": request.method, + "URL": request.url, + "Referrer": request.referrer, + "Session ID": request.cookies.get('session_id'), + } + with open("visit_log.txt", "a") as log_file: + log_file.write(json.dumps(log_entry) + "\n") + print("Visit logged with details: ", log_entry) + +@app.before_request +def before_request(): + log_visit() + +@login_manager.user_loader +def load_user(user_id): + return User.query.get(int(user_id)) + +@app.route('/') +def index(): + log_visit() + posts = blog.get_all_posts() + print("All blog posts: ", posts) + mp4_url1 = url_for('static', filename='img/replicate-prediction-ynt7ljeomvfa5ayn7lwqzss6iy.mp4') + mp4_url2 = url_for('static', filename='img/replicate-prediction-vcv52ik7jfe2hisfw4bhtz64vm (2).mp4') + return render_template('index.html', mp4_url1=mp4_url1, mp4_url2=mp4_url2, post=post) + +@app.route('/login', methods=['GET', 'POST']) +@csrf.exempt +def login(): + if current_user.is_authenticated: + return redirect('/dashboard') + + if request.method == 'POST': + username = request.form['username'] + password = request.form['password'] + user = User.query.filter_by(username=username).first() + + if user is not None and check_password_hash(user.password_hash, password): + login_user(user) + print("User logged in: ", username) + return redirect('/dashboard') + else: + flash('Invalid login credentials.') + + return render_template('login.html') + +@app.route('/logout') +@login_required +@csrf.exempt +def logout(): + logout_user() + print("User logged out") + return redirect('/') + +@app.route('/dashboard') +@login_required +def dashboard(): + if current_user.is_authenticated and current_user.is_admin: + messages = Message.query.all() + print("Accessed dashboard with messages: ", messages) + return render_template('view_messages.html', messages=messages) + else: + flash('You are not authorized to access this page.') + return redirect('/') + +@app.route('/about') +def about(): + print("Accessed 'About' page") + return render_template('about.html') + +@app.route('/create', methods=['GET', 'POST']) +@login_required +@csrf.exempt +def create(id): + if request.method == 'POST': + title = request.form.get('title') + content = request.form.get('content') + blog.create_post(title, content) + print("Created a new post with title: ", title) + return redirect(url_for('index')) + return render_template('create.html') + +@app.route('/post/Welcome to my digital sphere, a testament to a journey that has taken me from leading a thriving solar sales business to becoming an impassioned tech enthusiast. This platform is a reflection of my continuous growth, fueled by innovation, resilience, and a drive to make a difference.
+ + + + +Discover the wonders that await and join me in embracing the incredible potential of digital experiences.
+ +As we journey together through this digital landscape, I want to share with you my goal. I dream of a world where technology and humanity are intertwined, where advanced systems serve as a tool to unlock our full potential and not as a replacement for our unique human abilities.
+ +My desire is to contribute to this vision by creating solutions that are accessible, ethical, and beneficial for all. I aim to build technologies that respect our privacy, enhance our productivity, and enrich our lives in meaningful ways.
+ +Through this website, I hope to share my passion for technology and inspire others to join me in shaping a future where technology serves humanity. I invite you to explore, learn, and contribute to this exciting journey. Together, we can make a difference.
+Thank you for reading!
+Elijah Arbee
+