├── Procfile ├── .DS_Store ├── static ├── ecellLogo.jpg └── favicon.ico ├── Readme.md ├── Pipfile ├── requirements.txt ├── templates ├── errorPage.html ├── base.html ├── index.html ├── login.html ├── addItemPage.html └── Homepage.html ├── app.py └── Pipfile.lock /Procfile: -------------------------------------------------------------------------------- 1 | web: gunicorn app:app -------------------------------------------------------------------------------- /.DS_Store: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/henit-chobisa/Startup-Guide_Management-Website_FLASK/HEAD/.DS_Store -------------------------------------------------------------------------------- /static/ecellLogo.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/henit-chobisa/Startup-Guide_Management-Website_FLASK/HEAD/static/ecellLogo.jpg -------------------------------------------------------------------------------- /static/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/henit-chobisa/Startup-Guide_Management-Website_FLASK/HEAD/static/favicon.ico -------------------------------------------------------------------------------- /Readme.md: -------------------------------------------------------------------------------- 1 | ## Startup Guide Management 2 | #### Have a look...... 3 | [Visit Management@Startup-Guide](http://stgmanagement-ecellvit.herokuapp.com) 4 | -------------------------------------------------------------------------------- /Pipfile: -------------------------------------------------------------------------------- 1 | [[source]] 2 | url = "https://pypi.org/simple" 3 | verify_ssl = true 4 | name = "pypi" 5 | 6 | [packages] 7 | gunicorn = "*" 8 | flask = "*" 9 | requests = "*" 10 | 11 | [dev-packages] 12 | 13 | [requires] 14 | python_version = "3.9" 15 | -------------------------------------------------------------------------------- /requirements.txt: -------------------------------------------------------------------------------- 1 | certifi==2021.5.30 2 | charset-normalizer==2.0.4 3 | click==8.0.1 4 | Flask==2.0.1 5 | gunicorn==20.1.0 6 | idna==3.2 7 | itsdangerous==2.0.1 8 | Jinja2==3.0.1 9 | MarkupSafe==2.0.1 10 | requests==2.26.0 11 | urllib3==1.26.6 12 | Werkzeug==2.0.1 -------------------------------------------------------------------------------- /templates/errorPage.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | ERROR!! 8 | 9 | 10 |

Call the developers!

11 |

{{error}}

12 | 13 | -------------------------------------------------------------------------------- /templates/base.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 9 | 10 | Startup-Guide 11 | 12 | 13 | 14 | 28 | 29 |
30 | 31 | M A N A G E M E N T @ S T A R T U P G U I D E 32 |
33 |
34 | 37 |
38 | Loading... 39 |
40 |
41 | 44 | 45 | 46 | -------------------------------------------------------------------------------- /templates/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | Hello, world! 12 | 13 | 14 |

Startup Guide

15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | {% for element in allData %} 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | {% endfor %} 42 | 43 |
S.NOIDNameCategoryDescriptionLinkThumbnail
{{loop.index}}{{element._id}}{{element.name}}{{element.category}}{{element.description}}{{element.link}}{{element.thumbnail}}
44 | 45 | -------------------------------------------------------------------------------- /templates/login.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 9 | 10 | Login 11 | 12 | 13 | 14 | 39 |
40 |
41 | 43 |
44 |

Login for Admin Previleges

45 |
46 |
47 |
48 |
49 | 📮 50 | 51 |
52 |
53 |
54 |
55 | 🧑🏽‍💻 56 | 57 |
58 |
59 |
60 | 🔐 61 | 62 |
63 |
64 | 65 |
66 | 67 |
68 |
69 | 72 | 73 | 74 | -------------------------------------------------------------------------------- /templates/addItemPage.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 9 | 10 | Login 11 | 12 | 13 | 14 | 38 |
39 |
40 | 42 |
43 |

Add Object

44 |
45 |
46 |
47 |
48 | 📦 49 | 50 |
51 |
52 |
53 |
54 | 📜 55 | 56 |
57 |
58 |
59 |
60 | 🖥 61 | 62 |
63 |
64 |
65 |
66 | 🎆 67 | 68 |
69 |
70 |
71 |
72 | 73 | 76 |
77 |
78 | 79 | 82 |
83 |
84 | 85 | 88 |
89 |
90 | 91 | 94 |
95 |
96 | 97 | 100 |
101 |
102 | 103 | 106 |
107 |
108 | 109 | 112 |
113 |
114 | 115 | 116 | 117 |
118 |
119 | 122 | 123 | 124 | -------------------------------------------------------------------------------- /app.py: -------------------------------------------------------------------------------- 1 | import json 2 | from json.decoder import JSONDecoder 3 | from flask import Flask, render_template, request, redirect, send_from_directory 4 | import requests 5 | from types import SimpleNamespace, resolve_bases 6 | import random 7 | import os 8 | 9 | app = Flask(__name__) 10 | 11 | hostURL = "https://startupguidedeveloper.herokuapp.com" 12 | loggedInUsers = {} 13 | 14 | accessToken = "" 15 | refreshToken = "" 16 | 17 | class user(): 18 | def __init__(self,username, email, accessToken, refreshToken) -> None: 19 | self.username = username 20 | self.email = email 21 | self.accessToken = accessToken 22 | self.refreshToken = refreshToken 23 | 24 | class item (object): 25 | def __init__(self, _id,name,category, description, link, thumbnail ) -> None: 26 | self.name = name 27 | self._id = _id 28 | self.category = category 29 | self.description = description 30 | self.link = link 31 | self.thumbnail = thumbnail 32 | 33 | # def decodeObject(obj): 34 | # if '__type__' in obj and obj['__type__'] == 'item': 35 | # return item(obj['name'], obj['_id'], obj['category'], obj['description'], obj['link'], obj['thumbnail']) 36 | # return obj 37 | 38 | @app.route('/favicon.ico') 39 | def favicon(): 40 | return send_from_directory(os.path.join(app.root_path, 'static'), 41 | 'favicon.ico', mimetype='image/vnd.microsoft.icon') 42 | 43 | @app.route('/') 44 | def connection(): 45 | return render_template('base.html') 46 | 47 | @app.route('/authentication', methods = ['GET', 'POST']) 48 | def authentication(): 49 | return render_template('login.html') 50 | 51 | @app.route('/login', methods = ['GET', 'POST']) 52 | def login(): 53 | if request.method == "POST": 54 | data = {"email" : request.form['email'], "name" : request.form['Username'], "password" : request.form['password']} 55 | headers = {"content-type" : "application/json"} 56 | r = requests.post(f"{hostURL}/api/auth/login", json=data, headers = headers) 57 | 58 | if r.status_code == 200: 59 | newUser = user(username=request.form['Username'], email=request.form['email'], accessToken= data['accessToken'], refreshToken=data['refreshToken']) 60 | newUserID = random.randint(1000000, 9999999) 61 | loggedInUsers[newUserID] = newUser 62 | return redirect(f'/homepage/{data["accessToken"]}/{newUserID}') 63 | else : 64 | return redirect(f"/error/{r.status_code}/{r.text}") 65 | else : 66 | return "Sorry this route is not accessable" 67 | 68 | @app.route('/error//', methods = ['POST', 'GET']) 69 | def error(statuscode, error): 70 | return render_template('errorPage.html', statuscode = statuscode, error = error ) 71 | 72 | @app.route('/homepage//', methods = ['GET', 'POST']) 73 | def home(accessToken, userID): 74 | if (loggedInUsers[int(userID)].accessToken == accessToken): 75 | user = loggedInUsers[int(userID)] 76 | r = requests.get(f"{hostURL}/api/getAllBooks") 77 | books = [] 78 | for element in r.json(): 79 | newItem = item(element['_id'],element['name'],element['category'], element['description'], element['link'], element['thumbnail']) 80 | books.append(newItem) 81 | 82 | r = requests.get(f"{hostURL}/api/getAllBlogs") 83 | blogs = [] 84 | for element in r.json(): 85 | newItem = item(element['_id'],element['name'],element['category'], element['description'], element['link'], element['thumbnail']) 86 | blogs.append(newItem) 87 | 88 | r = requests.get(f"{hostURL}/api/getAllNewsletters") 89 | newsletters = [] 90 | for element in r.json(): 91 | newItem = item(element['_id'],element['name'],element['category'], element['description'], element['link'], element['thumbnail']) 92 | newsletters.append(newItem) 93 | 94 | r = requests.get(f"{hostURL}/api/getAllStartupStories") 95 | startupStories = [] 96 | for element in r.json(): 97 | newItem = item(element['_id'],element['name'],element['category'], element['description'], element['link'], element['thumbnail']) 98 | startupStories.append(newItem) 99 | 100 | r = requests.get(f"{hostURL}/api/getAllYoutubeChannels") 101 | youtubeChannels = [] 102 | for element in r.json(): 103 | newItem = item(element['_id'],element['name'],element['category'], element['description'], element['link'], element['thumbnail']) 104 | youtubeChannels.append(newItem) 105 | 106 | r = requests.get(f"{hostURL}/api/getAllPodcasts") 107 | podcasts = [] 108 | for element in r.json(): 109 | newItem = item(element['_id'],element['name'],element['category'], element['description'], element['link'], element['thumbnail']) 110 | podcasts.append(newItem) 111 | 112 | r = requests.get(f"{hostURL}/api/getAllTweets") 113 | tweets = [] 114 | for element in r.json(): 115 | newItem = item(element['_id'],element['name'],element['category'], element['description'], element['link'], element['thumbnail']) 116 | tweets.append(newItem) 117 | 118 | return render_template('Homepage.html',userID = userID ,user = user, books = books, blogs = blogs, newsletters = newsletters, startupStories = startupStories, youtubeChannels = youtubeChannels, podcasts = podcasts, tweets = tweets) 119 | else : 120 | return "Sorry, detected token from malicious route" 121 | 122 | @app.route('/addItem//' ,methods = ['POST', 'GET']) 123 | def addItem(token, userID): 124 | if request.method == 'POST': 125 | print(request.form['name']) 126 | body = { 127 | "name" : request.form['name'], 128 | "category" : request.form['category'], 129 | "thumbnail" : request.form['thumbnail'], 130 | "link" : request.form['link'], 131 | "description" : request.form['description'] 132 | } 133 | headers = { 134 | "content-type" : "application/json", 135 | "authorization" : f"Bearer {token}" 136 | } 137 | response = requests.post(f"{hostURL}/api/add{request.form['category']}", json = body, headers=headers) 138 | 139 | return render_template('addItemPage.html', token = token, userID = userID) 140 | 141 | if __name__ == "__main__" : 142 | app.run(debug=True) 143 | -------------------------------------------------------------------------------- /Pipfile.lock: -------------------------------------------------------------------------------- 1 | { 2 | "_meta": { 3 | "hash": { 4 | "sha256": "ca23c1d1549045c1fedc72fea7ed9ca6b14eeb5b8fcb7eeda6857dedd0cf05a0" 5 | }, 6 | "pipfile-spec": 6, 7 | "requires": { 8 | "python_version": "3.9" 9 | }, 10 | "sources": [ 11 | { 12 | "name": "pypi", 13 | "url": "https://pypi.org/simple", 14 | "verify_ssl": true 15 | } 16 | ] 17 | }, 18 | "default": { 19 | "certifi": { 20 | "hashes": [ 21 | "sha256:2bbf76fd432960138b3ef6dda3dde0544f27cbf8546c458e60baf371917ba9ee", 22 | "sha256:50b1e4f8446b06f41be7dd6338db18e0990601dce795c2b1686458aa7e8fa7d8" 23 | ], 24 | "version": "==2021.5.30" 25 | }, 26 | "charset-normalizer": { 27 | "hashes": [ 28 | "sha256:0c8911edd15d19223366a194a513099a302055a962bca2cec0f54b8b63175d8b", 29 | "sha256:f23667ebe1084be45f6ae0538e4a5a865206544097e4e8bbcacf42cd02a348f3" 30 | ], 31 | "markers": "python_version >= '3'", 32 | "version": "==2.0.4" 33 | }, 34 | "click": { 35 | "hashes": [ 36 | "sha256:8c04c11192119b1ef78ea049e0a6f0463e4c48ef00a30160c704337586f3ad7a", 37 | "sha256:fba402a4a47334742d782209a7c79bc448911afe1149d07bdabdf480b3e2f4b6" 38 | ], 39 | "markers": "python_version >= '3.6'", 40 | "version": "==8.0.1" 41 | }, 42 | "flask": { 43 | "hashes": [ 44 | "sha256:1c4c257b1892aec1398784c63791cbaa43062f1f7aeb555c4da961b20ee68f55", 45 | "sha256:a6209ca15eb63fc9385f38e452704113d679511d9574d09b2cf9183ae7d20dc9" 46 | ], 47 | "index": "pypi", 48 | "version": "==2.0.1" 49 | }, 50 | "gunicorn": { 51 | "hashes": [ 52 | "sha256:9dcc4547dbb1cb284accfb15ab5667a0e5d1881cc443e0677b4882a4067a807e", 53 | "sha256:e0a968b5ba15f8a328fdfd7ab1fcb5af4470c28aaf7e55df02a99bc13138e6e8" 54 | ], 55 | "index": "pypi", 56 | "version": "==20.1.0" 57 | }, 58 | "idna": { 59 | "hashes": [ 60 | "sha256:14475042e284991034cb48e06f6851428fb14c4dc953acd9be9a5e95c7b6dd7a", 61 | "sha256:467fbad99067910785144ce333826c71fb0e63a425657295239737f7ecd125f3" 62 | ], 63 | "markers": "python_version >= '3'", 64 | "version": "==3.2" 65 | }, 66 | "itsdangerous": { 67 | "hashes": [ 68 | "sha256:5174094b9637652bdb841a3029700391451bd092ba3db90600dea710ba28e97c", 69 | "sha256:9e724d68fc22902a1435351f84c3fb8623f303fffcc566a4cb952df8c572cff0" 70 | ], 71 | "markers": "python_version >= '3.6'", 72 | "version": "==2.0.1" 73 | }, 74 | "jinja2": { 75 | "hashes": [ 76 | "sha256:1f06f2da51e7b56b8f238affdd6b4e2c61e39598a378cc49345bc1bd42a978a4", 77 | "sha256:703f484b47a6af502e743c9122595cc812b0271f661722403114f71a79d0f5a4" 78 | ], 79 | "markers": "python_version >= '3.6'", 80 | "version": "==3.0.1" 81 | }, 82 | "markupsafe": { 83 | "hashes": [ 84 | "sha256:01a9b8ea66f1658938f65b93a85ebe8bc016e6769611be228d797c9d998dd298", 85 | "sha256:023cb26ec21ece8dc3907c0e8320058b2e0cb3c55cf9564da612bc325bed5e64", 86 | "sha256:0446679737af14f45767963a1a9ef7620189912317d095f2d9ffa183a4d25d2b", 87 | "sha256:0717a7390a68be14b8c793ba258e075c6f4ca819f15edfc2a3a027c823718567", 88 | "sha256:0955295dd5eec6cb6cc2fe1698f4c6d84af2e92de33fbcac4111913cd100a6ff", 89 | "sha256:0d4b31cc67ab36e3392bbf3862cfbadac3db12bdd8b02a2731f509ed5b829724", 90 | "sha256:10f82115e21dc0dfec9ab5c0223652f7197feb168c940f3ef61563fc2d6beb74", 91 | "sha256:168cd0a3642de83558a5153c8bd34f175a9a6e7f6dc6384b9655d2697312a646", 92 | "sha256:1d609f577dc6e1aa17d746f8bd3c31aa4d258f4070d61b2aa5c4166c1539de35", 93 | "sha256:1f2ade76b9903f39aa442b4aadd2177decb66525062db244b35d71d0ee8599b6", 94 | "sha256:2a7d351cbd8cfeb19ca00de495e224dea7e7d919659c2841bbb7f420ad03e2d6", 95 | "sha256:2d7d807855b419fc2ed3e631034685db6079889a1f01d5d9dac950f764da3dad", 96 | "sha256:2ef54abee730b502252bcdf31b10dacb0a416229b72c18b19e24a4509f273d26", 97 | "sha256:36bc903cbb393720fad60fc28c10de6acf10dc6cc883f3e24ee4012371399a38", 98 | "sha256:37205cac2a79194e3750b0af2a5720d95f786a55ce7df90c3af697bfa100eaac", 99 | "sha256:3c112550557578c26af18a1ccc9e090bfe03832ae994343cfdacd287db6a6ae7", 100 | "sha256:3dd007d54ee88b46be476e293f48c85048603f5f516008bee124ddd891398ed6", 101 | "sha256:47ab1e7b91c098ab893b828deafa1203de86d0bc6ab587b160f78fe6c4011f75", 102 | "sha256:49e3ceeabbfb9d66c3aef5af3a60cc43b85c33df25ce03d0031a608b0a8b2e3f", 103 | "sha256:4efca8f86c54b22348a5467704e3fec767b2db12fc39c6d963168ab1d3fc9135", 104 | "sha256:53edb4da6925ad13c07b6d26c2a852bd81e364f95301c66e930ab2aef5b5ddd8", 105 | "sha256:5855f8438a7d1d458206a2466bf82b0f104a3724bf96a1c781ab731e4201731a", 106 | "sha256:594c67807fb16238b30c44bdf74f36c02cdf22d1c8cda91ef8a0ed8dabf5620a", 107 | "sha256:5bb28c636d87e840583ee3adeb78172efc47c8b26127267f54a9c0ec251d41a9", 108 | "sha256:60bf42e36abfaf9aff1f50f52644b336d4f0a3fd6d8a60ca0d054ac9f713a864", 109 | "sha256:611d1ad9a4288cf3e3c16014564df047fe08410e628f89805e475368bd304914", 110 | "sha256:6557b31b5e2c9ddf0de32a691f2312a32f77cd7681d8af66c2692efdbef84c18", 111 | "sha256:693ce3f9e70a6cf7d2fb9e6c9d8b204b6b39897a2c4a1aa65728d5ac97dcc1d8", 112 | "sha256:6a7fae0dd14cf60ad5ff42baa2e95727c3d81ded453457771d02b7d2b3f9c0c2", 113 | "sha256:6c4ca60fa24e85fe25b912b01e62cb969d69a23a5d5867682dd3e80b5b02581d", 114 | "sha256:6fcf051089389abe060c9cd7caa212c707e58153afa2c649f00346ce6d260f1b", 115 | "sha256:7d91275b0245b1da4d4cfa07e0faedd5b0812efc15b702576d103293e252af1b", 116 | "sha256:905fec760bd2fa1388bb5b489ee8ee5f7291d692638ea5f67982d968366bef9f", 117 | "sha256:97383d78eb34da7e1fa37dd273c20ad4320929af65d156e35a5e2d89566d9dfb", 118 | "sha256:984d76483eb32f1bcb536dc27e4ad56bba4baa70be32fa87152832cdd9db0833", 119 | "sha256:99df47edb6bda1249d3e80fdabb1dab8c08ef3975f69aed437cb69d0a5de1e28", 120 | "sha256:a30e67a65b53ea0a5e62fe23682cfe22712e01f453b95233b25502f7c61cb415", 121 | "sha256:ab3ef638ace319fa26553db0624c4699e31a28bb2a835c5faca8f8acf6a5a902", 122 | "sha256:add36cb2dbb8b736611303cd3bfcee00afd96471b09cda130da3581cbdc56a6d", 123 | "sha256:b2f4bf27480f5e5e8ce285a8c8fd176c0b03e93dcc6646477d4630e83440c6a9", 124 | "sha256:b7f2d075102dc8c794cbde1947378051c4e5180d52d276987b8d28a3bd58c17d", 125 | "sha256:baa1a4e8f868845af802979fcdbf0bb11f94f1cb7ced4c4b8a351bb60d108145", 126 | "sha256:be98f628055368795d818ebf93da628541e10b75b41c559fdf36d104c5787066", 127 | "sha256:bf5d821ffabf0ef3533c39c518f3357b171a1651c1ff6827325e4489b0e46c3c", 128 | "sha256:c47adbc92fc1bb2b3274c4b3a43ae0e4573d9fbff4f54cd484555edbf030baf1", 129 | "sha256:d7f9850398e85aba693bb640262d3611788b1f29a79f0c93c565694658f4071f", 130 | "sha256:d8446c54dc28c01e5a2dbac5a25f071f6653e6e40f3a8818e8b45d790fe6ef53", 131 | "sha256:e0f138900af21926a02425cf736db95be9f4af72ba1bb21453432a07f6082134", 132 | "sha256:e9936f0b261d4df76ad22f8fee3ae83b60d7c3e871292cd42f40b81b70afae85", 133 | "sha256:f5653a225f31e113b152e56f154ccbe59eeb1c7487b39b9d9f9cdb58e6c79dc5", 134 | "sha256:f826e31d18b516f653fe296d967d700fddad5901ae07c622bb3705955e1faa94", 135 | "sha256:f8ba0e8349a38d3001fae7eadded3f6606f0da5d748ee53cc1dab1d6527b9509", 136 | "sha256:f9081981fe268bd86831e5c75f7de206ef275defcb82bc70740ae6dc507aee51", 137 | "sha256:fa130dd50c57d53368c9d59395cb5526eda596d3ffe36666cd81a44d56e48872" 138 | ], 139 | "markers": "python_version >= '3.6'", 140 | "version": "==2.0.1" 141 | }, 142 | "requests": { 143 | "hashes": [ 144 | "sha256:6c1246513ecd5ecd4528a0906f910e8f0f9c6b8ec72030dc9fd154dc1a6efd24", 145 | "sha256:b8aa58f8cf793ffd8782d3d8cb19e66ef36f7aba4353eec859e74678b01b07a7" 146 | ], 147 | "index": "pypi", 148 | "version": "==2.26.0" 149 | }, 150 | "urllib3": { 151 | "hashes": [ 152 | "sha256:39fb8672126159acb139a7718dd10806104dec1e2f0f6c88aab05d17df10c8d4", 153 | "sha256:f57b4c16c62fa2760b7e3d97c35b255512fb6b59a259730f36ba32ce9f8e342f" 154 | ], 155 | "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4' and python_version < '4'", 156 | "version": "==1.26.6" 157 | }, 158 | "werkzeug": { 159 | "hashes": [ 160 | "sha256:1de1db30d010ff1af14a009224ec49ab2329ad2cde454c8a708130642d579c42", 161 | "sha256:6c1ec500dcdba0baa27600f6a22f6333d8b662d22027ff9f6202e3367413caa8" 162 | ], 163 | "markers": "python_version >= '3.6'", 164 | "version": "==2.0.1" 165 | } 166 | }, 167 | "develop": {} 168 | } 169 | -------------------------------------------------------------------------------- /templates/Homepage.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 12 | 13 | HomePage@STG 14 | 15 | 16 | 17 | 18 | 43 | 44 |
45 |
46 | 48 |

Management@Startup-Guide

49 |
50 | 51 |
52 |
53 |
54 |

Books

55 |
56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | {% for element in books %} 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | {% endfor %} 78 | 79 |
SerialItem IDNameCategoryDescriptionLink
{{loop.index}}{{element._id}}{{element.name}}{{element.category}}{{element.description}}{{element.link}}
80 |
81 |

Blogs

82 |
83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | {% for element in blogs %} 96 | 97 | 98 | 99 | 100 | 101 | 102 | 103 | 104 | {% endfor %} 105 | 106 |
SerialItem IDNameCategoryDescriptionLink
{{loop.index}}{{element._id}}{{element.name}}{{element.category}}{{element.description}}{{element.link}}
107 |
108 |

Newsletters

109 |
110 | 111 | 112 | 113 | 114 | 115 | 116 | 117 | 118 | 119 | 120 | 121 | 122 | {% for element in newsletters %} 123 | 124 | 125 | 126 | 127 | 128 | 129 | 130 | 131 | {% endfor %} 132 | 133 |
SerialItem IDNameCategoryDescriptionLink
{{loop.index}}{{element._id}}{{element.name}}{{element.category}}{{element.description}}{{element.link}}
134 |
135 |

Startup Stories

136 |
137 | 138 | 139 | 140 | 141 | 142 | 143 | 144 | 145 | 146 | 147 | 148 | 149 | {% for element in startupStories %} 150 | 151 | 152 | 153 | 154 | 155 | 156 | 157 | 158 | {% endfor %} 159 | 160 |
SerialItem IDNameCategoryDescriptionLink
{{loop.index}}{{element._id}}{{element.name}}{{element.category}}{{element.description}}{{element.link}}
161 |
162 |

Youtube Channels

163 |
164 | 165 | 166 | 167 | 168 | 169 | 170 | 171 | 172 | 173 | 174 | 175 | 176 | {% for element in youtubeChannels %} 177 | 178 | 179 | 180 | 181 | 182 | 183 | 184 | 185 | {% endfor %} 186 | 187 |
SerialItem IDNameCategoryDescriptionLink
{{loop.index}}{{element._id}}{{element.name}}{{element.category}}{{element.description}}{{element.link}}
188 |
189 |

Podcasts

190 |
191 | 192 | 193 | 194 | 195 | 196 | 197 | 198 | 199 | 200 | 201 | 202 | 203 | {% for element in podcasts %} 204 | 205 | 206 | 207 | 208 | 209 | 210 | 211 | 212 | {% endfor %} 213 | 214 |
SerialItem IDNameCategoryDescriptionLink
{{loop.index}}{{element._id}}{{element.name}}{{element.category}}{{element.description}}{{element.link}}
215 |
216 |

Tweets

217 |
218 | 219 | 220 | 221 | 222 | 223 | 224 | 225 | 226 | 227 | 228 | 229 | 230 | {% for element in tweets %} 231 | 232 | 233 | 234 | 235 | 236 | 237 | 238 | 239 | {% endfor %} 240 | 241 |
SerialItem IDNameCategoryDescriptionLink
{{loop.index}}{{element._id}}{{element.name}}{{element.category}}{{element.description}}{{element.link}}
242 | 243 |
244 |
245 |
246 | 247 | 250 | 251 | 252 | --------------------------------------------------------------------------------