├── .editorconfig
├── .env
├── .gitignore
├── Dockerfile
├── LICENSE
├── Pipfile
├── Pipfile.lock
├── Procfile
├── README.md
├── companies
├── __init__.py
├── admin.py
├── apps.py
├── forms.py
├── management
│ ├── __init__.py
│ └── commands
│ │ ├── __init__.py
│ │ └── import_sponsors.py
├── migrations
│ ├── 0001_initial.py
│ ├── 0002_auto_20181108_1056.py
│ ├── 0003_auto_20181205_2332.py
│ ├── 0004_company_notes.py
│ ├── 0005_auto_20190702_0527.py
│ ├── 0006_company_email_exclude.py
│ ├── 0007_auto_20190712_0526.py
│ ├── 0008_auto_20190712_0806.py
│ ├── 0009_auto_20190802_0415.py
│ ├── 0010_auto_20190807_0322.py
│ ├── 0011_auto_20190807_0332.py
│ └── __init__.py
├── models.py
├── templates
│ ├── cards
│ │ ├── company_associated_sponsorships.html
│ │ └── company_general_info.html
│ ├── companies.html
│ ├── company_delete.html
│ ├── company_detail.html
│ ├── company_edit.html
│ ├── company_new.html
│ ├── industries.html
│ ├── industry_delete.html
│ ├── industry_edit.html
│ └── industry_new.html
├── tests.py
├── urls.py
└── views.py
├── contacts
├── __init__.py
├── admin.py
├── apps.py
├── forms.py
├── migrations
│ ├── 0001_initial.py
│ ├── 0002_auto_20181108_1037.py
│ ├── 0003_contact_notes.py
│ ├── 0004_contact_updated.py
│ ├── 0005_auto_20190630_0943.py
│ ├── 0006_auto_20190702_0527.py
│ ├── 0007_auto_20190703_0804.py
│ ├── 0007_contact_primary.py
│ ├── 0008_merge_20190703_0525.py
│ ├── 0009_auto_20190712_0526.py
│ ├── 0010_auto_20190802_0336.py
│ └── __init__.py
├── models.py
├── templates
│ ├── cards
│ │ └── contact_general_info.html
│ ├── contact_delete.html
│ ├── contact_detail.html
│ ├── contact_edit.html
│ ├── contact_new.html
│ └── contacts.html
├── tests.py
├── urls.py
└── views.py
├── dashboard
├── __init__.py
├── admin.py
├── apps.py
├── migrations
│ └── __init__.py
├── models.py
├── templates
│ ├── 404.html
│ └── dashboard.html
├── tests.py
├── urls.py
└── views.py
├── docker-build.sh
├── docker-run.sh
├── docker-shell.sh
├── docs
├── 326
│ ├── cory_lanza_submission_02.md
│ ├── cory_lanza_submission_03.md
│ ├── graph_models.png
│ ├── imgs
│ │ ├── companies_screenshot.png
│ │ ├── companyWireframe.png
│ │ ├── contactsWireframe.png
│ │ ├── contacts_screenshot.png
│ │ ├── dashboard_screenshot.png
│ │ ├── dashboard_wireframe.png
│ │ ├── data_model.jpg
│ │ ├── data_model.png
│ │ ├── data_model_rough_draft.jpg
│ │ ├── drafts_screenshot.png
│ │ ├── emailWireframe.png
│ │ ├── email_screenshot.png
│ │ ├── final
│ │ │ ├── 404.png
│ │ │ ├── companies.png
│ │ │ ├── company_edit.png
│ │ │ ├── company_new.png
│ │ │ ├── contact_edit.png
│ │ │ ├── contact_new.png
│ │ │ ├── contacts.png
│ │ │ ├── dashboard.png
│ │ │ ├── email_drafts.png
│ │ │ ├── email_edit.png
│ │ │ ├── email_outbox.png
│ │ │ ├── email_sent.png
│ │ │ ├── email_sent_view.png
│ │ │ ├── emails.png
│ │ │ ├── footer.png
│ │ │ ├── hackathon_edit.png
│ │ │ ├── hackathon_new.png
│ │ │ ├── hackathons.png
│ │ │ ├── login.png
│ │ │ ├── login_activated.png
│ │ │ ├── login_activation.png
│ │ │ ├── menu.png
│ │ │ ├── perk_edit.png
│ │ │ ├── perk_new.png
│ │ │ ├── profile_edit.png
│ │ │ ├── profile_settings.png
│ │ │ ├── register.png
│ │ │ ├── registered.png
│ │ │ ├── sponsorship_edit.png
│ │ │ ├── sponsorship_new.png
│ │ │ ├── sponsorships.png
│ │ │ ├── tier_edit.png
│ │ │ └── tier_new.png
│ │ ├── log-in_wireframe.png
│ │ ├── setting_wireframe.png
│ │ └── settings_screenshot.png
│ ├── ishan_khatri_submission_02.md
│ ├── ishan_khatri_submission_03.md
│ ├── kevin_fredericks_submission_02.md
│ ├── kevin_fredericks_submission_03.md
│ ├── nicholas_williams_submission_02.md
│ ├── nicholas_williams_submission_03.md
│ ├── presentation.pdf
│ ├── proposal.md
│ ├── single_slide_final.pdf
│ ├── submission_02.md
│ ├── submission_03.md
│ └── submission_final.md
├── database_dumps.md
├── environment.md
└── import_sponsors.md
├── emails
├── __init__.py
├── admin.py
├── apps.py
├── forms.py
├── migrations
│ ├── 0001_initial.py
│ ├── 0002_auto_20190709_0344.py
│ ├── 0003_auto_20190709_0434.py
│ ├── 0004_auto_20190709_2239.py
│ ├── 0005_auto_20190802_0145.py
│ ├── 0006_auto_20190803_2304.py
│ ├── 0007_auto_20190804_0131.py
│ ├── 0008_email_sent_contacts.py
│ ├── 0009_auto_20190804_0405.py
│ ├── 0010_email_attach_packet.py
│ ├── 0011_auto_20190805_1556.py
│ ├── 0012_email_exclude_contacted_companies.py
│ ├── 0013_email_exclude_responded_companies.py
│ └── __init__.py
├── models.py
├── sending.py
├── templates
│ ├── cards
│ │ ├── email_card.html
│ │ ├── email_companies_card.html
│ │ ├── email_contacts_card.html
│ │ ├── email_status.html
│ │ └── email_table.html
│ ├── email_change_type.html
│ ├── email_compose.html
│ ├── email_compose_forms.html
│ ├── email_compose_from_company.html
│ ├── email_compose_from_contacts.html
│ ├── email_compose_from_industry.html
│ ├── email_delete.html
│ ├── email_detail.html
│ ├── email_duplicate.html
│ ├── email_render_message.html
│ ├── email_send_message.html
│ ├── email_sent.html
│ └── email_show.html
├── tests.py
├── urls.py
└── views.py
├── hackathons
├── __init__.py
├── admin.py
├── apps.py
├── forms.py
├── migrations
│ ├── 0001_initial.py
│ ├── 0002_auto_20181206_1545.py
│ ├── 0003_auto_20190630_1745.py
│ ├── 0004_auto_20190630_1752.py
│ ├── 0005_auto_20190630_1811.py
│ ├── 0006_sponsorship_notes.py
│ ├── 0007_auto_20190702_0350.py
│ ├── 0008_auto_20190702_0352.py
│ ├── 0009_auto_20190702_0508.py
│ ├── 0010_auto_20190702_0508.py
│ ├── 0011_auto_20190702_0510.py
│ ├── 0012_auto_20190702_0556.py
│ ├── 0013_auto_20190702_0649.py
│ ├── 0014_auto_20190703_0453.py
│ ├── 0015_auto_20190712_0526.py
│ └── __init__.py
├── models.py
├── templates
│ ├── cards
│ │ ├── company_sponsorships_table.html
│ │ ├── lead_contacts_combined_table.html
│ │ ├── lead_status.html
│ │ ├── lead_table.html
│ │ ├── sponsorship_company_table.html
│ │ ├── sponsorship_status.html
│ │ └── sponsorship_table.html
│ ├── hackathon_detail.html
│ ├── hackathon_edit.html
│ ├── hackathon_new.html
│ ├── hackathons.html
│ ├── lead_delete.html
│ ├── lead_detail.html
│ ├── lead_edit.html
│ ├── lead_mark_contacted.html
│ ├── lead_new.html
│ ├── leads_show.html
│ ├── perk_edit.html
│ ├── perk_new.html
│ ├── sponsorship_assign_organizers.html
│ ├── sponsorship_delete.html
│ ├── sponsorship_detail.html
│ ├── sponsorship_edit.html
│ ├── sponsorship_new.html
│ ├── sponsorships_for_user.html
│ ├── sponsorships_for_user_all.html
│ ├── sponsorships_for_user_list.html
│ ├── sponsorships_for_user_modify.html
│ ├── sponsorships_show.html
│ ├── sponsorships_summary.html
│ ├── tier_edit.html
│ └── tier_new.html
├── tests.py
├── urls.py
└── views
│ ├── __init__.py
│ ├── hackathons.py
│ ├── leads.py
│ ├── perks.py
│ ├── sponsorships.py
│ └── tiers.py
├── init.bat
├── init.py
├── init.sh
├── jinja2-to-django.sh
├── manage.py
├── profiles
├── __init__.py
├── admin.py
├── apps.py
├── forms.py
├── migrations
│ ├── 0001_initial.py
│ ├── 0002_user_sponsorships.py
│ └── __init__.py
├── models.py
├── templates
│ ├── activation.html
│ ├── cards
│ │ ├── form-email-preferences.html
│ │ └── form-profile.html
│ ├── confirm.html
│ ├── login.html
│ ├── profile_edit.html
│ ├── register.html
│ └── settings.html
├── tests.py
├── token.py
├── urls.py
└── views.py
├── safe_init.sh
├── shared
├── __init__.py
├── contextprocessors.py
├── fields.py
├── forms
│ ├── __init__.py
│ └── fields.py
├── middleware.py
├── packet.py
├── storage.py
└── templatetags
│ ├── modify_get.py
│ └── order_by.py
├── templates
└── global
│ ├── base.html
│ ├── footer.html
│ ├── forms.html
│ ├── header.html
│ └── menu.html
└── website
├── __init__.py
├── jinja2.py
├── settings.py
├── static
├── global
│ ├── custom.css
│ └── footer.css
├── hackerforce-logo.png
├── humans.txt
├── img
│ └── HUM_logo.png
├── select2
│ ├── select2.dropdownPosition.js
│ ├── select2.min.css
│ └── select2.min.js
└── tabler
│ ├── css
│ ├── dashboard.css
│ ├── dashboard.rtl.css
│ ├── tabler.css
│ └── tabler.rtl.css
│ ├── fonts
│ └── feather
│ │ ├── feather-webfont.eot
│ │ ├── feather-webfont.svg
│ │ ├── feather-webfont.ttf
│ │ └── feather-webfont.woff
│ ├── images
│ ├── browsers
│ │ ├── android-browser.svg
│ │ ├── aol-explorer.svg
│ │ ├── blackberry.svg
│ │ ├── camino.svg
│ │ ├── chrome.svg
│ │ ├── chromium.svg
│ │ ├── dolphin.svg
│ │ ├── edge.svg
│ │ ├── firefox.svg
│ │ ├── ie.svg
│ │ ├── maxthon.svg
│ │ ├── mozilla.svg
│ │ ├── netscape.svg
│ │ ├── opera.svg
│ │ ├── safari.svg
│ │ ├── sleipnir.svg
│ │ ├── uc-browser.svg
│ │ └── vivaldi.svg
│ ├── crypto-currencies
│ │ ├── bitcoin.svg
│ │ ├── cardano.svg
│ │ ├── dash.svg
│ │ ├── eos.svg
│ │ ├── ethereum.svg
│ │ ├── litecoin.svg
│ │ ├── nem.svg
│ │ └── ripple.svg
│ ├── flags
│ │ ├── ad.svg
│ │ ├── ae.svg
│ │ ├── af.svg
│ │ ├── ag.svg
│ │ ├── ai.svg
│ │ ├── al.svg
│ │ ├── am.svg
│ │ ├── ao.svg
│ │ ├── aq.svg
│ │ ├── ar.svg
│ │ ├── as.svg
│ │ ├── at.svg
│ │ ├── au.svg
│ │ ├── aw.svg
│ │ ├── ax.svg
│ │ ├── az.svg
│ │ ├── ba.svg
│ │ ├── bb.svg
│ │ ├── bd.svg
│ │ ├── be.svg
│ │ ├── bf.svg
│ │ ├── bg.svg
│ │ ├── bh.svg
│ │ ├── bi.svg
│ │ ├── bj.svg
│ │ ├── bl.svg
│ │ ├── bm.svg
│ │ ├── bn.svg
│ │ ├── bo.svg
│ │ ├── bq.svg
│ │ ├── br.svg
│ │ ├── bs.svg
│ │ ├── bt.svg
│ │ ├── bv.svg
│ │ ├── bw.svg
│ │ ├── by.svg
│ │ ├── bz.svg
│ │ ├── ca.svg
│ │ ├── cc.svg
│ │ ├── cd.svg
│ │ ├── cf.svg
│ │ ├── cg.svg
│ │ ├── ch.svg
│ │ ├── ci.svg
│ │ ├── ck.svg
│ │ ├── cl.svg
│ │ ├── cm.svg
│ │ ├── cn.svg
│ │ ├── co.svg
│ │ ├── cr.svg
│ │ ├── cu.svg
│ │ ├── cv.svg
│ │ ├── cw.svg
│ │ ├── cx.svg
│ │ ├── cy.svg
│ │ ├── cz.svg
│ │ ├── de.svg
│ │ ├── dj.svg
│ │ ├── dk.svg
│ │ ├── dm.svg
│ │ ├── do.svg
│ │ ├── dz.svg
│ │ ├── ec.svg
│ │ ├── ee.svg
│ │ ├── eg.svg
│ │ ├── eh.svg
│ │ ├── er.svg
│ │ ├── es.svg
│ │ ├── et.svg
│ │ ├── eu.svg
│ │ ├── fi.svg
│ │ ├── fj.svg
│ │ ├── fk.svg
│ │ ├── fm.svg
│ │ ├── fo.svg
│ │ ├── fr.svg
│ │ ├── ga.svg
│ │ ├── gb-eng.svg
│ │ ├── gb-nir.svg
│ │ ├── gb-sct.svg
│ │ ├── gb-wls.svg
│ │ ├── gb.svg
│ │ ├── gd.svg
│ │ ├── ge.svg
│ │ ├── gf.svg
│ │ ├── gg.svg
│ │ ├── gh.svg
│ │ ├── gi.svg
│ │ ├── gl.svg
│ │ ├── gm.svg
│ │ ├── gn.svg
│ │ ├── gp.svg
│ │ ├── gq.svg
│ │ ├── gr.svg
│ │ ├── gs.svg
│ │ ├── gt.svg
│ │ ├── gu.svg
│ │ ├── gw.svg
│ │ ├── gy.svg
│ │ ├── hk.svg
│ │ ├── hm.svg
│ │ ├── hn.svg
│ │ ├── hr.svg
│ │ ├── ht.svg
│ │ ├── hu.svg
│ │ ├── id.svg
│ │ ├── ie.svg
│ │ ├── il.svg
│ │ ├── im.svg
│ │ ├── in.svg
│ │ ├── io.svg
│ │ ├── iq.svg
│ │ ├── ir.svg
│ │ ├── is.svg
│ │ ├── it.svg
│ │ ├── je.svg
│ │ ├── jm.svg
│ │ ├── jo.svg
│ │ ├── jp.svg
│ │ ├── ke.svg
│ │ ├── kg.svg
│ │ ├── kh.svg
│ │ ├── ki.svg
│ │ ├── km.svg
│ │ ├── kn.svg
│ │ ├── kp.svg
│ │ ├── kr.svg
│ │ ├── kw.svg
│ │ ├── ky.svg
│ │ ├── kz.svg
│ │ ├── la.svg
│ │ ├── lb.svg
│ │ ├── lc.svg
│ │ ├── li.svg
│ │ ├── lk.svg
│ │ ├── lr.svg
│ │ ├── ls.svg
│ │ ├── lt.svg
│ │ ├── lu.svg
│ │ ├── lv.svg
│ │ ├── ly.svg
│ │ ├── ma.svg
│ │ ├── mc.svg
│ │ ├── md.svg
│ │ ├── me.svg
│ │ ├── mf.svg
│ │ ├── mg.svg
│ │ ├── mh.svg
│ │ ├── mk.svg
│ │ ├── ml.svg
│ │ ├── mm.svg
│ │ ├── mn.svg
│ │ ├── mo.svg
│ │ ├── mp.svg
│ │ ├── mq.svg
│ │ ├── mr.svg
│ │ ├── ms.svg
│ │ ├── mt.svg
│ │ ├── mu.svg
│ │ ├── mv.svg
│ │ ├── mw.svg
│ │ ├── mx.svg
│ │ ├── my.svg
│ │ ├── mz.svg
│ │ ├── na.svg
│ │ ├── nc.svg
│ │ ├── ne.svg
│ │ ├── nf.svg
│ │ ├── ng.svg
│ │ ├── ni.svg
│ │ ├── nl.svg
│ │ ├── no.svg
│ │ ├── np.svg
│ │ ├── nr.svg
│ │ ├── nu.svg
│ │ ├── nz.svg
│ │ ├── om.svg
│ │ ├── pa.svg
│ │ ├── pe.svg
│ │ ├── pf.svg
│ │ ├── pg.svg
│ │ ├── ph.svg
│ │ ├── pk.svg
│ │ ├── pl.svg
│ │ ├── pm.svg
│ │ ├── pn.svg
│ │ ├── pr.svg
│ │ ├── ps.svg
│ │ ├── pt.svg
│ │ ├── pw.svg
│ │ ├── py.svg
│ │ ├── qa.svg
│ │ ├── re.svg
│ │ ├── ro.svg
│ │ ├── rs.svg
│ │ ├── ru.svg
│ │ ├── rw.svg
│ │ ├── sa.svg
│ │ ├── sb.svg
│ │ ├── sc.svg
│ │ ├── sd.svg
│ │ ├── se.svg
│ │ ├── sg.svg
│ │ ├── sh.svg
│ │ ├── si.svg
│ │ ├── sj.svg
│ │ ├── sk.svg
│ │ ├── sl.svg
│ │ ├── sm.svg
│ │ ├── sn.svg
│ │ ├── so.svg
│ │ ├── sr.svg
│ │ ├── ss.svg
│ │ ├── st.svg
│ │ ├── sv.svg
│ │ ├── sx.svg
│ │ ├── sy.svg
│ │ ├── sz.svg
│ │ ├── tc.svg
│ │ ├── td.svg
│ │ ├── tf.svg
│ │ ├── tg.svg
│ │ ├── th.svg
│ │ ├── tj.svg
│ │ ├── tk.svg
│ │ ├── tl.svg
│ │ ├── tm.svg
│ │ ├── tn.svg
│ │ ├── to.svg
│ │ ├── tr.svg
│ │ ├── tt.svg
│ │ ├── tv.svg
│ │ ├── tw.svg
│ │ ├── tz.svg
│ │ ├── ua.svg
│ │ ├── ug.svg
│ │ ├── um.svg
│ │ ├── un.svg
│ │ ├── us.svg
│ │ ├── uy.svg
│ │ ├── uz.svg
│ │ ├── va.svg
│ │ ├── vc.svg
│ │ ├── ve.svg
│ │ ├── vg.svg
│ │ ├── vi.svg
│ │ ├── vn.svg
│ │ ├── vu.svg
│ │ ├── wf.svg
│ │ ├── ws.svg
│ │ ├── ye.svg
│ │ ├── yt.svg
│ │ ├── za.svg
│ │ ├── zm.svg
│ │ └── zw.svg
│ └── payments
│ │ ├── 2checkout-dark.svg
│ │ ├── 2checkout.svg
│ │ ├── alipay-dark.svg
│ │ ├── alipay.svg
│ │ ├── amazon-dark.svg
│ │ ├── amazon.svg
│ │ ├── americanexpress-dark.svg
│ │ ├── americanexpress.svg
│ │ ├── applepay-dark.svg
│ │ ├── applepay.svg
│ │ ├── bancontact-dark.svg
│ │ ├── bancontact.svg
│ │ ├── bitcoin-dark.svg
│ │ ├── bitcoin.svg
│ │ ├── bitpay-dark.svg
│ │ ├── bitpay.svg
│ │ ├── cirrus-dark.svg
│ │ ├── cirrus.svg
│ │ ├── clickandbuy-dark.svg
│ │ ├── clickandbuy.svg
│ │ ├── coinkite-dark.svg
│ │ ├── coinkite.svg
│ │ ├── dinersclub-dark.svg
│ │ ├── dinersclub.svg
│ │ ├── directdebit-dark.svg
│ │ ├── directdebit.svg
│ │ ├── discover-dark.svg
│ │ ├── discover.svg
│ │ ├── dwolla-dark.svg
│ │ ├── dwolla.svg
│ │ ├── ebay-dark.svg
│ │ ├── ebay.svg
│ │ ├── eway-dark.svg
│ │ ├── eway.svg
│ │ ├── giropay-dark.svg
│ │ ├── giropay.svg
│ │ ├── googlewallet-dark.svg
│ │ ├── googlewallet.svg
│ │ ├── ingenico-dark.svg
│ │ ├── ingenico.svg
│ │ ├── jcb-dark.svg
│ │ ├── jcb.svg
│ │ ├── klarna-dark.svg
│ │ ├── klarna.svg
│ │ ├── laser-dark.svg
│ │ ├── laser.svg
│ │ ├── maestro-dark.svg
│ │ ├── maestro.svg
│ │ ├── mastercard-dark.svg
│ │ ├── mastercard.svg
│ │ ├── monero-dark.svg
│ │ ├── monero.svg
│ │ ├── neteller-dark.svg
│ │ ├── neteller.svg
│ │ ├── ogone-dark.svg
│ │ ├── ogone.svg
│ │ ├── okpay-dark.svg
│ │ ├── okpay.svg
│ │ ├── paybox-dark.svg
│ │ ├── paybox.svg
│ │ ├── paymill-dark.svg
│ │ ├── paymill.svg
│ │ ├── payone-dark.svg
│ │ ├── payone.svg
│ │ ├── payoneer-dark.svg
│ │ ├── payoneer.svg
│ │ ├── paypal-dark.svg
│ │ ├── paypal.svg
│ │ ├── paysafecard-dark.svg
│ │ ├── paysafecard.svg
│ │ ├── payu-dark.svg
│ │ ├── payu.svg
│ │ ├── payza-dark.svg
│ │ ├── payza.svg
│ │ ├── ripple-dark.svg
│ │ ├── ripple.svg
│ │ ├── sage-dark.svg
│ │ ├── sage.svg
│ │ ├── sepa-dark.svg
│ │ ├── sepa.svg
│ │ ├── shopify-dark.svg
│ │ ├── shopify.svg
│ │ ├── skrill-dark.svg
│ │ ├── skrill.svg
│ │ ├── solo-dark.svg
│ │ ├── solo.svg
│ │ ├── square-dark.svg
│ │ ├── square.svg
│ │ ├── stripe-dark.svg
│ │ ├── stripe.svg
│ │ ├── switch-dark.svg
│ │ ├── switch.svg
│ │ ├── ukash-dark.svg
│ │ ├── ukash.svg
│ │ ├── unionpay-dark.svg
│ │ ├── unionpay.svg
│ │ ├── verifone-dark.svg
│ │ ├── verifone.svg
│ │ ├── verisign-dark.svg
│ │ ├── verisign.svg
│ │ ├── visa-dark.svg
│ │ ├── visa.svg
│ │ ├── webmoney-dark.svg
│ │ ├── webmoney.svg
│ │ ├── westernunion-dark.svg
│ │ ├── westernunion.svg
│ │ ├── worldpay-dark.svg
│ │ └── worldpay.svg
│ ├── js
│ ├── core.js
│ ├── dashboard.js
│ ├── require.min.js
│ └── vendors
│ │ ├── bootstrap.bundle.min.js
│ │ ├── chart.bundle.min.js
│ │ ├── circle-progress.min.js
│ │ ├── jquery-3.2.1.min.js
│ │ ├── jquery-3.2.1.slim.min.js
│ │ ├── jquery-jvectormap-2.0.3.min.js
│ │ ├── jquery-jvectormap-de-merc.js
│ │ ├── jquery-jvectormap-world-mill.js
│ │ ├── jquery.sparkline.min.js
│ │ ├── jquery.tablesorter.min.js
│ │ └── selectize.min.js
│ └── plugins
│ ├── charts-c3
│ ├── js
│ │ ├── c3.min.js
│ │ └── d3.v3.min.js
│ ├── plugin.css
│ └── plugin.js
│ ├── fullcalendar
│ ├── js
│ │ ├── fullcalendar.min.js
│ │ └── moment.min.js
│ ├── plugin.css
│ └── plugin.js
│ ├── iconfonts
│ ├── fonts
│ │ ├── materialdesignicons
│ │ │ ├── materialdesignicons-webfont.eot
│ │ │ ├── materialdesignicons-webfont.svg
│ │ │ ├── materialdesignicons-webfont.ttf
│ │ │ ├── materialdesignicons-webfont.woff
│ │ │ └── materialdesignicons-webfont.woff2
│ │ ├── simple-line-icons
│ │ │ ├── Simple-Line-Icons.eot
│ │ │ ├── Simple-Line-Icons.svg
│ │ │ ├── Simple-Line-Icons.ttf
│ │ │ ├── Simple-Line-Icons.woff
│ │ │ └── Simple-Line-Icons.woff2
│ │ ├── themify
│ │ │ ├── themify.eot
│ │ │ ├── themify.svg
│ │ │ ├── themify.ttf
│ │ │ └── themify.woff
│ │ └── weathericons
│ │ │ ├── weathericons-regular-webfont.eot
│ │ │ ├── weathericons-regular-webfont.svg
│ │ │ ├── weathericons-regular-webfont.ttf
│ │ │ ├── weathericons-regular-webfont.woff
│ │ │ └── weathericons-regular-webfont.woff2
│ └── plugin.css
│ ├── input-mask
│ ├── js
│ │ └── jquery.mask.min.js
│ └── plugin.js
│ ├── maps-google
│ ├── plugin.css
│ └── plugin.js
│ └── prismjs
│ ├── js
│ └── prism.pack.js
│ ├── plugin.css
│ └── plugin.js
├── urls.py
└── wsgi.py
/.editorconfig:
--------------------------------------------------------------------------------
1 | # https://editorconfig.org/
2 |
3 | root = true
4 |
5 | [*]
6 | indent_style = space
7 | indent_size = 4
8 | insert_final_newline = true
9 | trim_trailing_whitespace = true
10 | end_of_line = lf
11 | charset = utf-8
12 |
13 | # Docstrings and comments use max_line_length = 79
14 | [*.py]
15 | max_line_length = 119
16 |
17 | # Use 2 spaces for the HTML files
18 | [*.html]
19 | indent_size = 2
20 |
21 | # The JSON files contain newlines inconsistently
22 | [*.json]
23 | indent_size = 2
24 | insert_final_newline = ignore
25 |
26 | [**/admin/js/vendor/**]
27 | indent_style = ignore
28 | indent_size = ignore
29 |
30 | # Minified JavaScript files shouldn't be changed
31 | [**.min.js]
32 | indent_style = ignore
33 | insert_final_newline = ignore
34 |
35 | # Makefiles always use tabs for indentation
36 | [Makefile]
37 | indent_style = tab
38 |
39 | # Batch files use tabs for indentation
40 | [*.bat]
41 | indent_style = tab
42 |
43 | [docs/**.txt]
44 | max_line_length = 79
--------------------------------------------------------------------------------
/.env:
--------------------------------------------------------------------------------
1 | WEB_CONCURRENCY=2
--------------------------------------------------------------------------------
/Dockerfile:
--------------------------------------------------------------------------------
1 | FROM python:3.6
2 | ADD . /app
3 | WORKDIR /app
4 | ENV PATH="/root/.local/bin:${PATH}"
5 | RUN \
6 | pip install --user pipenv && \
7 | pipenv install --system --deploy
8 | EXPOSE 8080
9 | CMD chmod +x ./safe_init.sh && ./safe_init.sh && \
10 | python manage.py runserver 0.0.0.0:8080
11 |
--------------------------------------------------------------------------------
/Pipfile:
--------------------------------------------------------------------------------
1 | [[source]]
2 | url = "https://pypi.python.org/simple"
3 | verify_ssl = true
4 | name = "pypi"
5 |
6 | [requires]
7 | python_version = "3.6"
8 |
9 | [packages]
10 | psycopg2-binary = "*"
11 | django-heroku = "*"
12 | gunicorn = "*"
13 | django = "*"
14 | django-jinja = "*"
15 | django-phonenumber-field = "==2.1.0"
16 | phonenumbers = "==8.10.1"
17 | django-widget-tweaks = "*"
18 | faker = "==1.0.0"
19 | django-ckeditor = "*"
20 | django-extensions = "*"
21 | django-multiselectfield="*"
22 | django-debug-toolbar = "*"
23 | django-ses = "*"
24 | requests = "*"
25 |
26 | [dev-packages]
27 |
--------------------------------------------------------------------------------
/Procfile:
--------------------------------------------------------------------------------
1 | release: python manage.py migrate --noinput
2 | web: gunicorn website.wsgi
3 |
--------------------------------------------------------------------------------
/companies/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/fuseumass/hackerforce/dfb6ac1304a7db21853765de9da795e8e9ef20bf/companies/__init__.py
--------------------------------------------------------------------------------
/companies/admin.py:
--------------------------------------------------------------------------------
1 | from django.contrib import admin
2 | from .models import Company, Industry
3 |
4 | # Register your models here.
5 |
6 | admin.site.register(Company)
7 | admin.site.register(Industry)
8 |
--------------------------------------------------------------------------------
/companies/apps.py:
--------------------------------------------------------------------------------
1 | from django.apps import AppConfig
2 |
3 |
4 | class CompaniesConfig(AppConfig):
5 | name = 'companies'
6 |
--------------------------------------------------------------------------------
/companies/management/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/fuseumass/hackerforce/dfb6ac1304a7db21853765de9da795e8e9ef20bf/companies/management/__init__.py
--------------------------------------------------------------------------------
/companies/management/commands/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/fuseumass/hackerforce/dfb6ac1304a7db21853765de9da795e8e9ef20bf/companies/management/commands/__init__.py
--------------------------------------------------------------------------------
/companies/migrations/0003_auto_20181205_2332.py:
--------------------------------------------------------------------------------
1 | # Generated by Django 2.1.3 on 2018-12-05 23:32
2 |
3 | from django.db import migrations, models
4 |
5 |
6 | class Migration(migrations.Migration):
7 |
8 | dependencies = [
9 | ('companies', '0002_auto_20181108_1056'),
10 | ]
11 |
12 | operations = [
13 | migrations.AlterField(
14 | model_name='company',
15 | name='updated',
16 | field=models.DateField(auto_now=True),
17 | ),
18 | ]
19 |
--------------------------------------------------------------------------------
/companies/migrations/0004_company_notes.py:
--------------------------------------------------------------------------------
1 | # Generated by Django 2.1.4 on 2019-06-30 06:52
2 |
3 | from django.db import migrations, models
4 |
5 |
6 | class Migration(migrations.Migration):
7 |
8 | dependencies = [
9 | ('companies', '0003_auto_20181205_2332'),
10 | ]
11 |
12 | operations = [
13 | migrations.AddField(
14 | model_name='company',
15 | name='notes',
16 | field=models.TextField(blank=True),
17 | ),
18 | ]
19 |
--------------------------------------------------------------------------------
/companies/migrations/0005_auto_20190702_0527.py:
--------------------------------------------------------------------------------
1 | # Generated by Django 2.1.9 on 2019-07-02 05:27
2 |
3 | from django.db import migrations
4 |
5 |
6 | class Migration(migrations.Migration):
7 |
8 | dependencies = [
9 | ('companies', '0004_company_notes'),
10 | ]
11 |
12 | operations = [
13 | migrations.RemoveField(
14 | model_name='company',
15 | name='donated',
16 | ),
17 | migrations.RemoveField(
18 | model_name='company',
19 | name='status',
20 | ),
21 | ]
22 |
--------------------------------------------------------------------------------
/companies/migrations/0006_company_email_exclude.py:
--------------------------------------------------------------------------------
1 | # Generated by Django 2.1.1 on 2019-07-03 07:39
2 |
3 | from django.db import migrations, models
4 |
5 |
6 | class Migration(migrations.Migration):
7 |
8 | dependencies = [
9 | ('companies', '0005_auto_20190702_0527'),
10 | ]
11 |
12 | operations = [
13 | migrations.AddField(
14 | model_name='company',
15 | name='email_exclude',
16 | field=models.BooleanField(blank=True, default=False),
17 | ),
18 | ]
19 |
--------------------------------------------------------------------------------
/companies/migrations/0007_auto_20190712_0526.py:
--------------------------------------------------------------------------------
1 | # Generated by Django 2.1.10 on 2019-07-12 05:26
2 |
3 | from django.db import migrations
4 |
5 |
6 | class Migration(migrations.Migration):
7 |
8 | dependencies = [
9 | ('companies', '0006_company_email_exclude'),
10 | ]
11 |
12 | operations = [
13 | migrations.AlterModelOptions(
14 | name='company',
15 | options={'ordering': ('name',)},
16 | ),
17 | migrations.AlterModelOptions(
18 | name='industry',
19 | options={'ordering': ('name',)},
20 | ),
21 | ]
22 |
--------------------------------------------------------------------------------
/companies/migrations/0008_auto_20190712_0806.py:
--------------------------------------------------------------------------------
1 | # Generated by Django 2.1.10 on 2019-07-12 08:06
2 |
3 | from django.db import migrations, models
4 |
5 |
6 | class Migration(migrations.Migration):
7 |
8 | dependencies = [
9 | ('companies', '0007_auto_20190712_0526'),
10 | ]
11 |
12 | operations = [
13 | migrations.AlterField(
14 | model_name='company',
15 | name='industries',
16 | field=models.ManyToManyField(blank=True, to='companies.Industry'),
17 | ),
18 | ]
19 |
--------------------------------------------------------------------------------
/companies/migrations/0009_auto_20190802_0415.py:
--------------------------------------------------------------------------------
1 | # Generated by Django 2.2.3 on 2019-08-02 04:15
2 |
3 | from django.db import migrations, models
4 |
5 |
6 | class Migration(migrations.Migration):
7 |
8 | dependencies = [
9 | ('companies', '0008_auto_20190712_0806'),
10 | ]
11 |
12 | operations = [
13 | migrations.AlterField(
14 | model_name='company',
15 | name='size',
16 | field=models.CharField(choices=[('L', 'Large'), ('M', 'Medium'), ('S', 'Small'), ('U', 'Unknown')], max_length=1),
17 | ),
18 | ]
19 |
--------------------------------------------------------------------------------
/companies/migrations/0010_auto_20190807_0322.py:
--------------------------------------------------------------------------------
1 | # Generated by Django 2.2.3 on 2019-08-07 07:22
2 |
3 | from django.db import migrations, models
4 |
5 |
6 | class Migration(migrations.Migration):
7 |
8 | dependencies = [
9 | ('companies', '0009_auto_20190802_0415'),
10 | ]
11 |
12 | operations = [
13 | migrations.AlterField(
14 | model_name='industry',
15 | name='color',
16 | field=models.CharField(choices=[('blue', 'blue'), ('green', 'green'), ('purple', 'purple'), ('orange', 'orange'), ('yellow', 'yellow'), ('red', 'red'), ('brown', 'brown'), ('pink', 'pink')], max_length=10),
17 | ),
18 | ]
19 |
--------------------------------------------------------------------------------
/companies/migrations/0011_auto_20190807_0332.py:
--------------------------------------------------------------------------------
1 | # Generated by Django 2.2.3 on 2019-08-07 07:32
2 |
3 | from django.db import migrations, models
4 |
5 |
6 | class Migration(migrations.Migration):
7 |
8 | dependencies = [
9 | ('companies', '0010_auto_20190807_0322'),
10 | ]
11 |
12 | operations = [
13 | migrations.AlterField(
14 | model_name='industry',
15 | name='color',
16 | field=models.CharField(choices=[('blue', 'blue'), ('green', 'green'), ('purple', 'purple'), ('orange', 'orange'), ('yellow', 'yellow'), ('red', 'red'), ('brown', 'brown'), ('pink', 'pink'), ('gray', 'gray')], max_length=10),
17 | ),
18 | ]
19 |
--------------------------------------------------------------------------------
/companies/migrations/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/fuseumass/hackerforce/dfb6ac1304a7db21853765de9da795e8e9ef20bf/companies/migrations/__init__.py
--------------------------------------------------------------------------------
/companies/templates/cards/company_general_info.html:
--------------------------------------------------------------------------------
1 |
2 | Company Size:
3 | {%if company.size == 'S'%}
4 | Small
5 | {% endif %}
6 | {%if company.size == 'M'%}
7 | Medium
8 | {% endif %}
9 | {%if company.size == 'L'%}
10 | Large
11 | {% endif %}
12 |
13 |
14 | Industries:
15 | {% for industry in company.industries.all %}
16 | {{ industry.name }}
17 | {% endfor %}
18 |
19 |
20 | Last Updated: {{ company.updated }}
21 |
--------------------------------------------------------------------------------
/companies/templates/company_edit.html:
--------------------------------------------------------------------------------
1 | {% extends 'global/forms.html' %}
2 | {% block basetitle %}
3 | Edit Company
4 | {% endblock %}
5 | {% block title %}
6 | Edit Company
7 | {% endblock %}
8 | {% block formheader %}
9 | {{ block.super }}
10 |
18 | {% endblock %}
19 |
20 | {% block js %}
21 |
27 | {% endblock %}
--------------------------------------------------------------------------------
/companies/templates/company_new.html:
--------------------------------------------------------------------------------
1 | {% extends 'global/forms.html' %}
2 | {% block basetitle %}
3 | New Company
4 | {% endblock %}
5 | {% block title %}
6 | New Company
7 | {% endblock %}
8 |
9 | {% block js %}
10 |
16 | {% endblock %}
--------------------------------------------------------------------------------
/companies/templates/industry_delete.html:
--------------------------------------------------------------------------------
1 | {% extends 'global/forms.html' %}
2 | {% block content %}
3 |
4 |
5 |
10 |
11 |
12 | Are you sure you want to delete this industry? This will not delete any associated companies.
13 |
14 |
15 |
20 |
21 |
22 |
23 | {% endblock %}
--------------------------------------------------------------------------------
/companies/templates/industry_edit.html:
--------------------------------------------------------------------------------
1 | {% extends 'global/forms.html' %}
2 | {% block basetitle %}
3 | Edit Industry
4 | {% endblock %}
5 | {% block title %}
6 | Edit Industry
7 | {% endblock %}
8 | {% block formheader %}
9 | {{ block.super }}
10 |
18 | {% endblock %}
19 |
20 | {% block js %}
21 |
26 | {% endblock %}
--------------------------------------------------------------------------------
/companies/templates/industry_new.html:
--------------------------------------------------------------------------------
1 | {% extends 'global/forms.html' %}
2 | {% block basetitle %}
3 | New Industry
4 | {% endblock %}
5 | {% block title %}
6 | New Industry
7 | {% endblock %}
8 |
9 | {% block js %}
10 |
15 | {% endblock %}
--------------------------------------------------------------------------------
/companies/tests.py:
--------------------------------------------------------------------------------
1 | from django.test import TestCase
2 |
3 | # Create your tests here.
4 |
--------------------------------------------------------------------------------
/companies/urls.py:
--------------------------------------------------------------------------------
1 | from django.urls import path, include
2 |
3 | from .views import *
4 |
5 |
6 | urlpatterns_industries = [
7 | path("industries", industries, name="index"),
8 | path("industries/new", industry_new, name="new"),
9 | path("industries/", industry_edit, name="edit"),
10 | path("industries//delete", industry_delete, name="delete"),
11 | ]
12 |
13 |
14 | app_name = 'companies'
15 | urlpatterns = [
16 | path('', companies, name='index'),
17 | # path('new', views.new, name='new')
18 | path("new", company_new, name="new"),
19 | path("/edit", company_edit, name="edit"),
20 | path("/delete", company_delete, name="delete"),
21 | path("/view", company_detail, name="view"),
22 |
23 | path("", include((urlpatterns_industries, "industries"))),
24 |
25 |
26 | ]
--------------------------------------------------------------------------------
/contacts/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/fuseumass/hackerforce/dfb6ac1304a7db21853765de9da795e8e9ef20bf/contacts/__init__.py
--------------------------------------------------------------------------------
/contacts/admin.py:
--------------------------------------------------------------------------------
1 | from django.contrib import admin
2 |
3 | from .models import Contact
4 |
5 | admin.site.register(Contact)
6 |
--------------------------------------------------------------------------------
/contacts/apps.py:
--------------------------------------------------------------------------------
1 | from django.apps import AppConfig
2 |
3 |
4 | class ContactsConfig(AppConfig):
5 | name = 'contacts'
6 |
--------------------------------------------------------------------------------
/contacts/migrations/0001_initial.py:
--------------------------------------------------------------------------------
1 | # Generated by Django 2.1.3 on 2018-11-07 15:45
2 |
3 | from django.db import migrations, models
4 | import phonenumber_field.modelfields
5 |
6 |
7 | class Migration(migrations.Migration):
8 |
9 | initial = True
10 |
11 | dependencies = [
12 | ]
13 |
14 | operations = [
15 | migrations.CreateModel(
16 | name='Contact',
17 | fields=[
18 | ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
19 | ('first_name', models.CharField(max_length=50)),
20 | ('last_name', models.CharField(max_length=50)),
21 | ('company', models.CharField(max_length=100)),
22 | ('position', models.CharField(max_length=100)),
23 | ('email', models.EmailField(max_length=254)),
24 | ('phone_number', phonenumber_field.modelfields.PhoneNumberField(blank=True, max_length=128)),
25 | ('is_warm_contact', models.BooleanField()),
26 | ],
27 | ),
28 | ]
29 |
--------------------------------------------------------------------------------
/contacts/migrations/0002_auto_20181108_1037.py:
--------------------------------------------------------------------------------
1 | # Generated by Django 2.1.3 on 2018-11-08 10:37
2 |
3 | from django.db import migrations, models
4 | import django.db.models.deletion
5 |
6 |
7 | class Migration(migrations.Migration):
8 |
9 | dependencies = [
10 | ('contacts', '0001_initial'),
11 | ]
12 |
13 | operations = [
14 | migrations.AlterField(
15 | model_name='contact',
16 | name='company',
17 | field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='companies.Company'),
18 | ),
19 | ]
20 |
--------------------------------------------------------------------------------
/contacts/migrations/0003_contact_notes.py:
--------------------------------------------------------------------------------
1 | # Generated by Django 2.1.4 on 2019-06-30 06:52
2 |
3 | from django.db import migrations, models
4 |
5 |
6 | class Migration(migrations.Migration):
7 |
8 | dependencies = [
9 | ('contacts', '0002_auto_20181108_1037'),
10 | ]
11 |
12 | operations = [
13 | migrations.AddField(
14 | model_name='contact',
15 | name='notes',
16 | field=models.TextField(blank=True),
17 | ),
18 | ]
19 |
--------------------------------------------------------------------------------
/contacts/migrations/0004_contact_updated.py:
--------------------------------------------------------------------------------
1 | # Generated by Django 2.1.9 on 2019-06-30 09:33
2 |
3 | from django.db import migrations, models
4 |
5 |
6 | class Migration(migrations.Migration):
7 |
8 | dependencies = [
9 | ('contacts', '0003_contact_notes'),
10 | ]
11 |
12 | operations = [
13 | migrations.AddField(
14 | model_name='contact',
15 | name='updated',
16 | field=models.DateField(auto_now=True),
17 | ),
18 | ]
19 |
--------------------------------------------------------------------------------
/contacts/migrations/0005_auto_20190630_0943.py:
--------------------------------------------------------------------------------
1 | # Generated by Django 2.1.9 on 2019-06-30 09:43
2 |
3 | from django.db import migrations, models
4 |
5 |
6 | class Migration(migrations.Migration):
7 |
8 | dependencies = [
9 | ('contacts', '0004_contact_updated'),
10 | ]
11 |
12 | operations = [
13 | migrations.RemoveField(
14 | model_name='contact',
15 | name='is_warm_contact',
16 | ),
17 | migrations.AddField(
18 | model_name='contact',
19 | name='status',
20 | field=models.CharField(choices=[('U', 'Uncontacted'), ('C', 'Contacted')], default='U', max_length=1),
21 | preserve_default=False,
22 | ),
23 | ]
24 |
--------------------------------------------------------------------------------
/contacts/migrations/0006_auto_20190702_0527.py:
--------------------------------------------------------------------------------
1 | # Generated by Django 2.1.9 on 2019-07-02 05:27
2 |
3 | from django.db import migrations, models
4 | import django.db.models.deletion
5 |
6 |
7 | class Migration(migrations.Migration):
8 |
9 | dependencies = [
10 | ('contacts', '0005_auto_20190630_0943'),
11 | ]
12 |
13 | operations = [
14 | migrations.RemoveField(
15 | model_name='contact',
16 | name='status',
17 | ),
18 | migrations.AlterField(
19 | model_name='contact',
20 | name='company',
21 | field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='contacts', to='companies.Company'),
22 | ),
23 | ]
24 |
--------------------------------------------------------------------------------
/contacts/migrations/0007_auto_20190703_0804.py:
--------------------------------------------------------------------------------
1 | # Generated by Django 2.1.9 on 2019-07-03 08:04
2 |
3 | from django.db import migrations, models
4 |
5 |
6 | class Migration(migrations.Migration):
7 |
8 | dependencies = [
9 | ('contacts', '0006_auto_20190702_0527'),
10 | ]
11 |
12 | operations = [
13 | migrations.AlterField(
14 | model_name='contact',
15 | name='phone_number',
16 | field=models.CharField(blank=True, max_length=20),
17 | ),
18 | ]
19 |
--------------------------------------------------------------------------------
/contacts/migrations/0007_contact_primary.py:
--------------------------------------------------------------------------------
1 | # Generated by Django 2.1.1 on 2019-07-03 04:58
2 |
3 | from django.db import migrations, models
4 |
5 |
6 | class Migration(migrations.Migration):
7 |
8 | dependencies = [
9 | ('contacts', '0006_auto_20190702_0527'),
10 | ]
11 |
12 | operations = [
13 | migrations.AddField(
14 | model_name='contact',
15 | name='primary',
16 | field=models.BooleanField(default=False),
17 | ),
18 | ]
19 |
--------------------------------------------------------------------------------
/contacts/migrations/0008_merge_20190703_0525.py:
--------------------------------------------------------------------------------
1 | # Generated by Django 2.1.1 on 2019-07-03 09:25
2 |
3 | from django.db import migrations
4 |
5 |
6 | class Migration(migrations.Migration):
7 |
8 | dependencies = [
9 | ('contacts', '0007_contact_primary'),
10 | ('contacts', '0007_auto_20190703_0804'),
11 | ]
12 |
13 | operations = [
14 | ]
15 |
--------------------------------------------------------------------------------
/contacts/migrations/0009_auto_20190712_0526.py:
--------------------------------------------------------------------------------
1 | # Generated by Django 2.1.10 on 2019-07-12 05:26
2 |
3 | from django.db import migrations
4 |
5 |
6 | class Migration(migrations.Migration):
7 |
8 | dependencies = [
9 | ('contacts', '0008_merge_20190703_0525'),
10 | ]
11 |
12 | operations = [
13 | migrations.AlterModelOptions(
14 | name='contact',
15 | options={'ordering': ('last_name', 'first_name')},
16 | ),
17 | ]
18 |
--------------------------------------------------------------------------------
/contacts/migrations/0010_auto_20190802_0336.py:
--------------------------------------------------------------------------------
1 | # Generated by Django 2.2.3 on 2019-08-02 03:36
2 |
3 | from django.db import migrations, models
4 |
5 |
6 | class Migration(migrations.Migration):
7 |
8 | dependencies = [
9 | ('contacts', '0009_auto_20190712_0526'),
10 | ]
11 |
12 | operations = [
13 | migrations.AlterField(
14 | model_name='contact',
15 | name='position',
16 | field=models.CharField(blank=True, max_length=100),
17 | ),
18 | ]
19 |
--------------------------------------------------------------------------------
/contacts/migrations/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/fuseumass/hackerforce/dfb6ac1304a7db21853765de9da795e8e9ef20bf/contacts/migrations/__init__.py
--------------------------------------------------------------------------------
/contacts/models.py:
--------------------------------------------------------------------------------
1 | from django.db import models
2 | from phonenumber_field.modelfields import PhoneNumberField
3 |
4 | from companies.models import Company
5 |
6 |
7 | class Contact(models.Model):
8 | first_name = models.CharField(max_length=50)
9 | last_name = models.CharField(max_length=50)
10 |
11 | company = models.ForeignKey(Company, on_delete=models.CASCADE, related_name='contacts')
12 | position = models.CharField(max_length=100, blank=True)
13 | primary = models.BooleanField(default=False)
14 |
15 | email = models.EmailField()
16 | phone_number = models.CharField(max_length=20, blank=True)
17 |
18 | notes = models.TextField(blank=True)
19 | updated = models.DateField(auto_now=True)
20 | # sponsorships field
21 |
22 | def __str__(self):
23 | return f"{self.name()} ({self.company})"
24 |
25 | def name(self):
26 | return f"{self.first_name} {self.last_name}"
27 |
28 | class Meta:
29 | ordering = ('last_name', 'first_name')
30 |
--------------------------------------------------------------------------------
/contacts/templates/contact_edit.html:
--------------------------------------------------------------------------------
1 | {% extends 'global/forms.html' %}
2 | {% block basetitle %}
3 | Edit Contact
4 | {% endblock %}
5 | {% block title %}
6 | Edit Contact
7 | {% endblock %}
8 | {% block formheader %}
9 | {{ block.super }}
10 |
18 | {% endblock %}
19 |
20 | {% block js %}
21 |
26 | {% endblock %}
--------------------------------------------------------------------------------
/contacts/templates/contact_new.html:
--------------------------------------------------------------------------------
1 | {% extends 'global/forms.html' %}
2 | {% block basetitle %}
3 | New Contact
4 | {% endblock %}
5 | {% block title %}
6 | New Contact
7 | {% endblock %}
8 |
9 | {% block formbodyheader %}
10 | {% if not request.GET.company_id %}
11 |
12 | If this contact is for a new company, create the company first .
13 |
14 | {% endif %}
15 | {% endblock %}
16 |
17 | {% block js %}
18 |
23 | {% endblock %}
--------------------------------------------------------------------------------
/contacts/tests.py:
--------------------------------------------------------------------------------
1 | from django.test import TestCase
2 |
3 | # Create your tests here.
4 |
--------------------------------------------------------------------------------
/contacts/urls.py:
--------------------------------------------------------------------------------
1 | from django.urls import path
2 |
3 | from . import views
4 |
5 | app_name = "contacts"
6 | urlpatterns = [
7 | path("", views.contacts, name="index"),
8 | path("new", views.contact_new, name="new"),
9 | path("/edit", views.contact_edit, name="edit"),
10 | path("/delete", views.contact_delete, name="delete"),
11 | path("/view", views.contact_detail, name="view"),
12 | ]
13 |
--------------------------------------------------------------------------------
/dashboard/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/fuseumass/hackerforce/dfb6ac1304a7db21853765de9da795e8e9ef20bf/dashboard/__init__.py
--------------------------------------------------------------------------------
/dashboard/admin.py:
--------------------------------------------------------------------------------
1 | from django.contrib import admin
2 |
3 | # Register your models here.
4 |
--------------------------------------------------------------------------------
/dashboard/apps.py:
--------------------------------------------------------------------------------
1 | from django.apps import AppConfig
2 |
3 |
4 | class DashboardConfig(AppConfig):
5 | name = 'dashboard'
6 |
--------------------------------------------------------------------------------
/dashboard/migrations/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/fuseumass/hackerforce/dfb6ac1304a7db21853765de9da795e8e9ef20bf/dashboard/migrations/__init__.py
--------------------------------------------------------------------------------
/dashboard/models.py:
--------------------------------------------------------------------------------
1 | from django.db import models
2 |
3 | # Create your models here.
4 |
--------------------------------------------------------------------------------
/dashboard/tests.py:
--------------------------------------------------------------------------------
1 | from django.test import TestCase
2 |
3 | # Create your tests here.
4 |
--------------------------------------------------------------------------------
/dashboard/urls.py:
--------------------------------------------------------------------------------
1 | from django.urls import path
2 |
3 | from . import views
4 |
5 | app_name = "dashboard"
6 | urlpatterns = [
7 | path("", views.dashboard_index, name="index"),
8 | path("h/", views.dashboard, name="view"),
9 | path("404", views.page404, name="404"),
10 | ]
11 |
--------------------------------------------------------------------------------
/docker-build.sh:
--------------------------------------------------------------------------------
1 | #!/bin/bash
2 | docker build -t hacker-force .
3 |
--------------------------------------------------------------------------------
/docker-run.sh:
--------------------------------------------------------------------------------
1 | #!/bin/bash
2 | docker run -v `pwd`:/app -p 8080:8080 -it hacker-force "$@"
3 |
--------------------------------------------------------------------------------
/docker-shell.sh:
--------------------------------------------------------------------------------
1 | docker exec -it `docker ps --format '{{.ID}}' -f 'ancestor=hacker-force'` ${@:-/bin/bash}
2 |
--------------------------------------------------------------------------------
/docs/326/cory_lanza_submission_02.md:
--------------------------------------------------------------------------------
1 | # Cory Lanza
2 | ## Data Model
3 | I drew out the rough draft of our overall data model, which was used as a guide to create our data model in Django.
4 | 
5 | ## Companies model
6 | I created a Django ORM that represented the company model from the image above. The model contained fields for name, industries, contact, size, status, amount donated, and date updated. I also registered this data model with Django's administrator so that models can be added and edited from the Django admin console.
7 | ## Companies view
8 | I updated the Companies page I created for submission 1 to use Jinja templating to display the data from the companies table created from the model above. The companies are all rendered into a single table on the comapanies page.
9 |
--------------------------------------------------------------------------------
/docs/326/cory_lanza_submission_03.md:
--------------------------------------------------------------------------------
1 | # Cory Lanza
2 | ## Create Company form
3 | I created a form that enables users to add new companies from the company page. This form has fields for each attribute of the company data model, and when submitted adds the new company to the list of companies shown on the companies page.
4 | ## Edit Company form
5 | Created a view and form that enables users to edit companies. This has all the same fields from the create form and auto populates with the current data.
6 | ## User Authentication
7 | Added a check to ensure that only logged in users can create or edit from the companies page. If not logged in the buttons for create and edit will not appear and the forms will not show.
8 |
--------------------------------------------------------------------------------
/docs/326/graph_models.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/fuseumass/hackerforce/dfb6ac1304a7db21853765de9da795e8e9ef20bf/docs/326/graph_models.png
--------------------------------------------------------------------------------
/docs/326/imgs/companies_screenshot.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/fuseumass/hackerforce/dfb6ac1304a7db21853765de9da795e8e9ef20bf/docs/326/imgs/companies_screenshot.png
--------------------------------------------------------------------------------
/docs/326/imgs/companyWireframe.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/fuseumass/hackerforce/dfb6ac1304a7db21853765de9da795e8e9ef20bf/docs/326/imgs/companyWireframe.png
--------------------------------------------------------------------------------
/docs/326/imgs/contactsWireframe.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/fuseumass/hackerforce/dfb6ac1304a7db21853765de9da795e8e9ef20bf/docs/326/imgs/contactsWireframe.png
--------------------------------------------------------------------------------
/docs/326/imgs/contacts_screenshot.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/fuseumass/hackerforce/dfb6ac1304a7db21853765de9da795e8e9ef20bf/docs/326/imgs/contacts_screenshot.png
--------------------------------------------------------------------------------
/docs/326/imgs/dashboard_screenshot.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/fuseumass/hackerforce/dfb6ac1304a7db21853765de9da795e8e9ef20bf/docs/326/imgs/dashboard_screenshot.png
--------------------------------------------------------------------------------
/docs/326/imgs/dashboard_wireframe.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/fuseumass/hackerforce/dfb6ac1304a7db21853765de9da795e8e9ef20bf/docs/326/imgs/dashboard_wireframe.png
--------------------------------------------------------------------------------
/docs/326/imgs/data_model.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/fuseumass/hackerforce/dfb6ac1304a7db21853765de9da795e8e9ef20bf/docs/326/imgs/data_model.jpg
--------------------------------------------------------------------------------
/docs/326/imgs/data_model.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/fuseumass/hackerforce/dfb6ac1304a7db21853765de9da795e8e9ef20bf/docs/326/imgs/data_model.png
--------------------------------------------------------------------------------
/docs/326/imgs/data_model_rough_draft.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/fuseumass/hackerforce/dfb6ac1304a7db21853765de9da795e8e9ef20bf/docs/326/imgs/data_model_rough_draft.jpg
--------------------------------------------------------------------------------
/docs/326/imgs/drafts_screenshot.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/fuseumass/hackerforce/dfb6ac1304a7db21853765de9da795e8e9ef20bf/docs/326/imgs/drafts_screenshot.png
--------------------------------------------------------------------------------
/docs/326/imgs/emailWireframe.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/fuseumass/hackerforce/dfb6ac1304a7db21853765de9da795e8e9ef20bf/docs/326/imgs/emailWireframe.png
--------------------------------------------------------------------------------
/docs/326/imgs/email_screenshot.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/fuseumass/hackerforce/dfb6ac1304a7db21853765de9da795e8e9ef20bf/docs/326/imgs/email_screenshot.png
--------------------------------------------------------------------------------
/docs/326/imgs/final/404.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/fuseumass/hackerforce/dfb6ac1304a7db21853765de9da795e8e9ef20bf/docs/326/imgs/final/404.png
--------------------------------------------------------------------------------
/docs/326/imgs/final/companies.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/fuseumass/hackerforce/dfb6ac1304a7db21853765de9da795e8e9ef20bf/docs/326/imgs/final/companies.png
--------------------------------------------------------------------------------
/docs/326/imgs/final/company_edit.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/fuseumass/hackerforce/dfb6ac1304a7db21853765de9da795e8e9ef20bf/docs/326/imgs/final/company_edit.png
--------------------------------------------------------------------------------
/docs/326/imgs/final/company_new.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/fuseumass/hackerforce/dfb6ac1304a7db21853765de9da795e8e9ef20bf/docs/326/imgs/final/company_new.png
--------------------------------------------------------------------------------
/docs/326/imgs/final/contact_edit.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/fuseumass/hackerforce/dfb6ac1304a7db21853765de9da795e8e9ef20bf/docs/326/imgs/final/contact_edit.png
--------------------------------------------------------------------------------
/docs/326/imgs/final/contact_new.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/fuseumass/hackerforce/dfb6ac1304a7db21853765de9da795e8e9ef20bf/docs/326/imgs/final/contact_new.png
--------------------------------------------------------------------------------
/docs/326/imgs/final/contacts.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/fuseumass/hackerforce/dfb6ac1304a7db21853765de9da795e8e9ef20bf/docs/326/imgs/final/contacts.png
--------------------------------------------------------------------------------
/docs/326/imgs/final/dashboard.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/fuseumass/hackerforce/dfb6ac1304a7db21853765de9da795e8e9ef20bf/docs/326/imgs/final/dashboard.png
--------------------------------------------------------------------------------
/docs/326/imgs/final/email_drafts.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/fuseumass/hackerforce/dfb6ac1304a7db21853765de9da795e8e9ef20bf/docs/326/imgs/final/email_drafts.png
--------------------------------------------------------------------------------
/docs/326/imgs/final/email_edit.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/fuseumass/hackerforce/dfb6ac1304a7db21853765de9da795e8e9ef20bf/docs/326/imgs/final/email_edit.png
--------------------------------------------------------------------------------
/docs/326/imgs/final/email_outbox.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/fuseumass/hackerforce/dfb6ac1304a7db21853765de9da795e8e9ef20bf/docs/326/imgs/final/email_outbox.png
--------------------------------------------------------------------------------
/docs/326/imgs/final/email_sent.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/fuseumass/hackerforce/dfb6ac1304a7db21853765de9da795e8e9ef20bf/docs/326/imgs/final/email_sent.png
--------------------------------------------------------------------------------
/docs/326/imgs/final/email_sent_view.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/fuseumass/hackerforce/dfb6ac1304a7db21853765de9da795e8e9ef20bf/docs/326/imgs/final/email_sent_view.png
--------------------------------------------------------------------------------
/docs/326/imgs/final/emails.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/fuseumass/hackerforce/dfb6ac1304a7db21853765de9da795e8e9ef20bf/docs/326/imgs/final/emails.png
--------------------------------------------------------------------------------
/docs/326/imgs/final/footer.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/fuseumass/hackerforce/dfb6ac1304a7db21853765de9da795e8e9ef20bf/docs/326/imgs/final/footer.png
--------------------------------------------------------------------------------
/docs/326/imgs/final/hackathon_edit.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/fuseumass/hackerforce/dfb6ac1304a7db21853765de9da795e8e9ef20bf/docs/326/imgs/final/hackathon_edit.png
--------------------------------------------------------------------------------
/docs/326/imgs/final/hackathon_new.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/fuseumass/hackerforce/dfb6ac1304a7db21853765de9da795e8e9ef20bf/docs/326/imgs/final/hackathon_new.png
--------------------------------------------------------------------------------
/docs/326/imgs/final/hackathons.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/fuseumass/hackerforce/dfb6ac1304a7db21853765de9da795e8e9ef20bf/docs/326/imgs/final/hackathons.png
--------------------------------------------------------------------------------
/docs/326/imgs/final/login.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/fuseumass/hackerforce/dfb6ac1304a7db21853765de9da795e8e9ef20bf/docs/326/imgs/final/login.png
--------------------------------------------------------------------------------
/docs/326/imgs/final/login_activated.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/fuseumass/hackerforce/dfb6ac1304a7db21853765de9da795e8e9ef20bf/docs/326/imgs/final/login_activated.png
--------------------------------------------------------------------------------
/docs/326/imgs/final/login_activation.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/fuseumass/hackerforce/dfb6ac1304a7db21853765de9da795e8e9ef20bf/docs/326/imgs/final/login_activation.png
--------------------------------------------------------------------------------
/docs/326/imgs/final/menu.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/fuseumass/hackerforce/dfb6ac1304a7db21853765de9da795e8e9ef20bf/docs/326/imgs/final/menu.png
--------------------------------------------------------------------------------
/docs/326/imgs/final/perk_edit.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/fuseumass/hackerforce/dfb6ac1304a7db21853765de9da795e8e9ef20bf/docs/326/imgs/final/perk_edit.png
--------------------------------------------------------------------------------
/docs/326/imgs/final/perk_new.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/fuseumass/hackerforce/dfb6ac1304a7db21853765de9da795e8e9ef20bf/docs/326/imgs/final/perk_new.png
--------------------------------------------------------------------------------
/docs/326/imgs/final/profile_edit.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/fuseumass/hackerforce/dfb6ac1304a7db21853765de9da795e8e9ef20bf/docs/326/imgs/final/profile_edit.png
--------------------------------------------------------------------------------
/docs/326/imgs/final/profile_settings.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/fuseumass/hackerforce/dfb6ac1304a7db21853765de9da795e8e9ef20bf/docs/326/imgs/final/profile_settings.png
--------------------------------------------------------------------------------
/docs/326/imgs/final/register.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/fuseumass/hackerforce/dfb6ac1304a7db21853765de9da795e8e9ef20bf/docs/326/imgs/final/register.png
--------------------------------------------------------------------------------
/docs/326/imgs/final/registered.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/fuseumass/hackerforce/dfb6ac1304a7db21853765de9da795e8e9ef20bf/docs/326/imgs/final/registered.png
--------------------------------------------------------------------------------
/docs/326/imgs/final/sponsorship_edit.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/fuseumass/hackerforce/dfb6ac1304a7db21853765de9da795e8e9ef20bf/docs/326/imgs/final/sponsorship_edit.png
--------------------------------------------------------------------------------
/docs/326/imgs/final/sponsorship_new.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/fuseumass/hackerforce/dfb6ac1304a7db21853765de9da795e8e9ef20bf/docs/326/imgs/final/sponsorship_new.png
--------------------------------------------------------------------------------
/docs/326/imgs/final/sponsorships.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/fuseumass/hackerforce/dfb6ac1304a7db21853765de9da795e8e9ef20bf/docs/326/imgs/final/sponsorships.png
--------------------------------------------------------------------------------
/docs/326/imgs/final/tier_edit.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/fuseumass/hackerforce/dfb6ac1304a7db21853765de9da795e8e9ef20bf/docs/326/imgs/final/tier_edit.png
--------------------------------------------------------------------------------
/docs/326/imgs/final/tier_new.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/fuseumass/hackerforce/dfb6ac1304a7db21853765de9da795e8e9ef20bf/docs/326/imgs/final/tier_new.png
--------------------------------------------------------------------------------
/docs/326/imgs/log-in_wireframe.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/fuseumass/hackerforce/dfb6ac1304a7db21853765de9da795e8e9ef20bf/docs/326/imgs/log-in_wireframe.png
--------------------------------------------------------------------------------
/docs/326/imgs/setting_wireframe.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/fuseumass/hackerforce/dfb6ac1304a7db21853765de9da795e8e9ef20bf/docs/326/imgs/setting_wireframe.png
--------------------------------------------------------------------------------
/docs/326/imgs/settings_screenshot.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/fuseumass/hackerforce/dfb6ac1304a7db21853765de9da795e8e9ef20bf/docs/326/imgs/settings_screenshot.png
--------------------------------------------------------------------------------
/docs/326/ishan_khatri_submission_02.md:
--------------------------------------------------------------------------------
1 | # Ishan Khatri
2 |
3 | ## User Model
4 | I created a custom user model that extends the Abstract User base class in Python which allows for additional fields to be stored in the User's model without creating an additional table and running a Join to look up user data that isn't included in the default Django User Model.
5 |
6 | Currently the custom user model only supports the additional field of `phone_number` but in the future additional fields may be added.
7 |
8 | ## User Authentication
9 | In addition I created all of the linkages between the custom User model and the default Django authentication system in order to allow for users to register, log-in, and logout. The appropiate views & buttons were also created for this with sexy styling provided by the tabler library.
10 |
11 | ## Database Diagram
12 | I created our data diagram which you can view below.
13 | 
14 |
15 | ## Project submission video
16 | I narrated and recorded our submission video which you can watch [here](https://youtu.be/p0cZxPLVxxg).
17 |
--------------------------------------------------------------------------------
/docs/326/ishan_khatri_submission_03.md:
--------------------------------------------------------------------------------
1 | # Ishan Khatri
2 |
3 | ## User Authentication
4 | Implemented the entire user model. It's an overload of the Django class user and provides registration, log-in, and log-out functionality. Additionally user-groups are supported and can be created/assigned from the Django admin panel.
5 |
6 | ## Misc stuff
7 | I updated the dashboard view to reflect real stats from the sponsorship objects and fixed misc things in other folks branches during PR merges 😎
8 |
9 | ## Video
10 | I made the video again :)
--------------------------------------------------------------------------------
/docs/326/kevin_fredericks_submission_02.md:
--------------------------------------------------------------------------------
1 | # Kevin Fredericks
2 |
3 | ## Email Model
4 | I created an Email model that contains all relevant information for a new email. It has a subject, body, time created, time scheduled for, and a message status field which will be used to separate the table views into Drafts, Outbox, and Sent screens.
5 |
6 | ## Email Form
7 | I made a form that accepts input from a user to make an email, it is located at the generic emails url. It has the fields subject, body, and time scheduled to allow user creation.
8 |
9 | ## Multiple Email Displays
10 | I made multiple email display view for the different email statuses. These include Drafts, Outbox, and Sent. They each will now have their own table view to be populated with random data.
--------------------------------------------------------------------------------
/docs/326/kevin_fredericks_submission_03.md:
--------------------------------------------------------------------------------
1 | # Kevin Fredericks
2 |
3 | ## Email Form Edit View
4 | I had the create form for the email page done for the last submission, so I had to get the edit form for emails up and running. This included making the view, stitching together the urls, and making the edit button work on the three email subsidiary pages.
5 |
6 | ## Multiple Email Subsidiary Tables
7 | I created functionality that would place the created or edited email in the associated email subsidiary, be it the sent folder, drafts folder, or outbox. This included making a custom display for the sent email views, because they needed to be read only. The outbox and the drafts folder both can be edited, and if the associated folder is changed for the email, the new folder will render so that the emails new location can be seen.
8 |
9 |
10 | ## Team Right Up
11 | I wrote the team write up, checking what everyone did, and bringing all our ideas together.
--------------------------------------------------------------------------------
/docs/326/nicholas_williams_submission_03.md:
--------------------------------------------------------------------------------
1 | # Nicholas Williams
2 |
3 | ## Hackathon Models
4 |
5 | I created models for Hackathons, Tiers, Perks and Sponsorships
6 |
7 | I added population of these 4 models to the init.py script
8 |
9 | I added these models to the admin interface
10 |
11 | ## Forms
12 |
13 | I created new and edit forms for the above 4 models, in addition to urls and views.
14 |
15 | ## Additional Show Pages and URL routing
16 |
17 | I added a page to show the list of sponsorships for a given hackathon.
18 |
19 | I added a page that show all hackathons and provides links to create new tiers, perks and hackathons.
20 |
21 | I made the buttons we had on the dashboard page link to the new pages for sponsorships and hackathons.
22 |
23 | ## Carryover from Part 2
24 |
25 | Creating a basic form template for easy creation of forms with the django forms api.
26 |
27 | New and Edit forms for contacts model.
28 |
--------------------------------------------------------------------------------
/docs/326/presentation.pdf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/fuseumass/hackerforce/dfb6ac1304a7db21853765de9da795e8e9ef20bf/docs/326/presentation.pdf
--------------------------------------------------------------------------------
/docs/326/single_slide_final.pdf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/fuseumass/hackerforce/dfb6ac1304a7db21853765de9da795e8e9ef20bf/docs/326/single_slide_final.pdf
--------------------------------------------------------------------------------
/docs/database_dumps.md:
--------------------------------------------------------------------------------
1 | # Database dumps
2 |
3 | To generate production DB fixtures:
4 | ```bash
5 | $ heroku run -a sponsorship-app python manage.py dumpdata -- > dumpdata-prod-aug1.json
6 | ```
7 |
8 | To load production DB fixtures locally:
9 | ```bash
10 | $ ./docker-run.sh python manage.py migrate
11 | $ ./docker-run.sh python manage.py loaddata dumpdata-prod-aug1.json -e contenttypes
12 | $ ./docker-run.sh bash -c "echo \"
13 | adminuser = User.objects.create_user('admin', 'admin@326.edu', 'admin')
14 | adminuser.save()
15 | adminuser.is_superuser = True
16 | adminuser.is_staff = True
17 | adminuser.save()
18 | \" | python manage.py shell_plus --"
19 | ```
20 |
21 | When importing a production dump, you MUST add the 'admin' user to prevent `docker-run.sh` from wiping and deleting the database!
22 |
--------------------------------------------------------------------------------
/docs/import_sponsors.md:
--------------------------------------------------------------------------------
1 | # Import Sponsors
2 |
3 | ```bash
4 | ./docker-run.sh python manage.py import_sponsors --csv hum-vi-sponsorship-master-list.csv --dataset-name="HackUMass VI Sponsorship Master List" --dataset-event="HackUMass VI"
5 | ```
6 |
7 | Add `--pretend` to test.
--------------------------------------------------------------------------------
/emails/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/fuseumass/hackerforce/dfb6ac1304a7db21853765de9da795e8e9ef20bf/emails/__init__.py
--------------------------------------------------------------------------------
/emails/admin.py:
--------------------------------------------------------------------------------
1 | from django.contrib import admin
2 |
3 | # Register your models here.
4 |
--------------------------------------------------------------------------------
/emails/apps.py:
--------------------------------------------------------------------------------
1 | from django.apps import AppConfig
2 |
3 |
4 | class EmailsConfig(AppConfig):
5 | name = 'emails'
6 |
--------------------------------------------------------------------------------
/emails/migrations/0003_auto_20190709_0434.py:
--------------------------------------------------------------------------------
1 | # Generated by Django 2.1.10 on 2019-07-09 04:34
2 |
3 | from django.db import migrations, models
4 |
5 |
6 | class Migration(migrations.Migration):
7 |
8 | dependencies = [
9 | ('emails', '0002_auto_20190709_0344'),
10 | ]
11 |
12 | operations = [
13 | migrations.AlterField(
14 | model_name='email',
15 | name='to_companies',
16 | field=models.ManyToManyField(blank=True, related_name='email_templates', to='companies.Company'),
17 | ),
18 | migrations.AlterField(
19 | model_name='email',
20 | name='to_contacts',
21 | field=models.ManyToManyField(blank=True, related_name='email_templates', to='contacts.Contact'),
22 | ),
23 | migrations.AlterField(
24 | model_name='email',
25 | name='to_industries',
26 | field=models.ManyToManyField(blank=True, to='companies.Industry'),
27 | ),
28 | ]
29 |
--------------------------------------------------------------------------------
/emails/migrations/0004_auto_20190709_2239.py:
--------------------------------------------------------------------------------
1 | # Generated by Django 2.1.1 on 2019-07-10 02:39
2 |
3 | from django.db import migrations
4 | import multiselectfield.db.fields
5 |
6 |
7 | class Migration(migrations.Migration):
8 |
9 | dependencies = [
10 | ('emails', '0003_auto_20190709_0434'),
11 | ]
12 |
13 | operations = [
14 | migrations.AlterField(
15 | model_name='email',
16 | name='contacted_selection',
17 | field=multiselectfield.db.fields.MultiSelectField(blank=True, choices=[('U', 'Uncontacted'), ('C1', 'Contacted 1x'), ('C2', 'Contacted 2x'), ('C3', 'Contacted 3x or more')], max_length=10),
18 | ),
19 | ]
20 |
--------------------------------------------------------------------------------
/emails/migrations/0005_auto_20190802_0145.py:
--------------------------------------------------------------------------------
1 | # Generated by Django 2.2.3 on 2019-08-02 01:45
2 |
3 | from django.db import migrations
4 | import shared.forms.fields
5 |
6 |
7 | class Migration(migrations.Migration):
8 |
9 | dependencies = [
10 | ('emails', '0004_auto_20190709_2239'),
11 | ]
12 |
13 | operations = [
14 | migrations.AlterField(
15 | model_name='email',
16 | name='contacted_selection',
17 | field=shared.forms.fields.MultiSelectField(blank=True, choices=[('U', 'Uncontacted'), ('C1', 'Contacted 1x'), ('C2', 'Contacted 2x'), ('C3', 'Contacted 3x or more')], max_length=10),
18 | ),
19 | migrations.AlterField(
20 | model_name='email',
21 | name='primary_selection',
22 | field=shared.forms.fields.MultiSelectField(blank=True, choices=[('P', 'Primary'), ('NP', 'Not-Primary')], max_length=4),
23 | ),
24 | migrations.AlterField(
25 | model_name='email',
26 | name='size_selection',
27 | field=shared.forms.fields.MultiSelectField(blank=True, choices=[('S', 'Small'), ('M', 'Medium'), ('L', 'Large')], max_length=5),
28 | ),
29 | ]
30 |
--------------------------------------------------------------------------------
/emails/migrations/0006_auto_20190803_2304.py:
--------------------------------------------------------------------------------
1 | # Generated by Django 2.2.3 on 2019-08-03 23:04
2 |
3 | from django.db import migrations, models
4 |
5 |
6 | class Migration(migrations.Migration):
7 |
8 | dependencies = [
9 | ('emails', '0005_auto_20190802_0145'),
10 | ]
11 |
12 | operations = [
13 | migrations.AddField(
14 | model_name='email',
15 | name='internal_title',
16 | field=models.CharField(default='', help_text='Enter an internal title for this email', max_length=200),
17 | preserve_default=False,
18 | ),
19 | migrations.AlterField(
20 | model_name='email',
21 | name='subject',
22 | field=models.CharField(help_text='Enter an email subject', max_length=200),
23 | ),
24 | ]
25 |
--------------------------------------------------------------------------------
/emails/migrations/0007_auto_20190804_0131.py:
--------------------------------------------------------------------------------
1 | # Generated by Django 2.2.3 on 2019-08-04 01:31
2 |
3 | from django.db import migrations
4 | import shared.forms.fields
5 |
6 |
7 | class Migration(migrations.Migration):
8 |
9 | dependencies = [
10 | ('emails', '0006_auto_20190803_2304'),
11 | ]
12 |
13 | operations = [
14 | migrations.AlterField(
15 | model_name='email',
16 | name='size_selection',
17 | field=shared.forms.fields.MultiSelectField(blank=True, choices=[('L', 'Large'), ('M', 'Medium'), ('S', 'Small'), ('U', 'Unknown')], max_length=7),
18 | ),
19 | ]
20 |
--------------------------------------------------------------------------------
/emails/migrations/0008_email_sent_contacts.py:
--------------------------------------------------------------------------------
1 | # Generated by Django 2.2.3 on 2019-08-04 03:24
2 |
3 | from django.db import migrations, models
4 |
5 |
6 | class Migration(migrations.Migration):
7 |
8 | dependencies = [
9 | ('contacts', '0010_auto_20190802_0336'),
10 | ('emails', '0007_auto_20190804_0131'),
11 | ]
12 |
13 | operations = [
14 | migrations.AddField(
15 | model_name='email',
16 | name='sent_contacts',
17 | field=models.ManyToManyField(blank=True, related_name='emails_sent', to='contacts.Contact'),
18 | ),
19 | ]
20 |
--------------------------------------------------------------------------------
/emails/migrations/0009_auto_20190804_0405.py:
--------------------------------------------------------------------------------
1 | # Generated by Django 2.2.3 on 2019-08-04 04:05
2 |
3 | from django.db import migrations, models
4 |
5 |
6 | class Migration(migrations.Migration):
7 |
8 | dependencies = [
9 | ('emails', '0008_email_sent_contacts'),
10 | ]
11 |
12 | operations = [
13 | migrations.AlterField(
14 | model_name='email',
15 | name='time_scheduled',
16 | field=models.DateTimeField(blank=True),
17 | ),
18 | migrations.AlterField(
19 | model_name='email',
20 | name='time_sent',
21 | field=models.DateTimeField(blank=True),
22 | ),
23 | ]
24 |
--------------------------------------------------------------------------------
/emails/migrations/0010_email_attach_packet.py:
--------------------------------------------------------------------------------
1 | # Generated by Django 2.2.3 on 2019-08-05 01:12
2 |
3 | from django.db import migrations, models
4 |
5 |
6 | class Migration(migrations.Migration):
7 |
8 | dependencies = [
9 | ('emails', '0009_auto_20190804_0405'),
10 | ]
11 |
12 | operations = [
13 | migrations.AddField(
14 | model_name='email',
15 | name='attach_packet',
16 | field=models.BooleanField(default=False, help_text='Whether the sponsorship packet should be attached'),
17 | ),
18 | ]
19 |
--------------------------------------------------------------------------------
/emails/migrations/0011_auto_20190805_1556.py:
--------------------------------------------------------------------------------
1 | # Generated by Django 2.2.3 on 2019-08-05 19:56
2 |
3 | from django.db import migrations, models
4 |
5 |
6 | class Migration(migrations.Migration):
7 |
8 | dependencies = [
9 | ('emails', '0010_email_attach_packet'),
10 | ]
11 |
12 | operations = [
13 | migrations.AlterField(
14 | model_name='email',
15 | name='time_scheduled',
16 | field=models.DateTimeField(blank=True, null=True),
17 | ),
18 | migrations.AlterField(
19 | model_name='email',
20 | name='time_sent',
21 | field=models.DateTimeField(blank=True, null=True),
22 | ),
23 | ]
24 |
--------------------------------------------------------------------------------
/emails/migrations/0012_email_exclude_contacted_companies.py:
--------------------------------------------------------------------------------
1 | # Generated by Django 2.2.3 on 2019-08-07 05:50
2 |
3 | from django.db import migrations, models
4 |
5 |
6 | class Migration(migrations.Migration):
7 |
8 | dependencies = [
9 | ('emails', '0011_auto_20190805_1556'),
10 | ]
11 |
12 | operations = [
13 | migrations.AddField(
14 | model_name='email',
15 | name='exclude_contacted_companies',
16 | field=models.BooleanField(default=False, help_text='Whether to exclude all contacts from companies who have already been contacted'),
17 | ),
18 | ]
19 |
--------------------------------------------------------------------------------
/emails/migrations/0013_email_exclude_responded_companies.py:
--------------------------------------------------------------------------------
1 | # Generated by Django 2.2.4 on 2019-09-24 02:47
2 |
3 | from django.db import migrations, models
4 |
5 |
6 | class Migration(migrations.Migration):
7 |
8 | dependencies = [
9 | ('emails', '0012_email_exclude_contacted_companies'),
10 | ]
11 |
12 | operations = [
13 | migrations.AddField(
14 | model_name='email',
15 | name='exclude_responded_companies',
16 | field=models.BooleanField(default=False, help_text='Whether to exclude all contacts from companies who have been contacted and at least responded'),
17 | ),
18 | ]
19 |
--------------------------------------------------------------------------------
/emails/migrations/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/fuseumass/hackerforce/dfb6ac1304a7db21853765de9da795e8e9ef20bf/emails/migrations/__init__.py
--------------------------------------------------------------------------------
/emails/sending.py:
--------------------------------------------------------------------------------
1 | from django.conf import settings
2 | from django.core.mail import EmailMessage
3 |
4 | def send_email_now(subject, message, to_email, file_path):
5 | from_email = settings.FROM_EMAIL
6 | bcc_email = settings.BCC_EMAIL
7 | reply_to_email = settings.REPLY_TO_EMAIL
8 |
9 | email = EmailMessage(
10 | subject=subject,
11 | body=message,
12 | from_email=from_email,
13 | to=[to_email],
14 | bcc=[bcc_email],
15 | reply_to=[reply_to_email]
16 | )
17 | email.content_subtype = "html"
18 | if file_path:
19 | email.attach_file(file_path)
20 | s = email.send()
21 | return email, s
22 |
--------------------------------------------------------------------------------
/emails/templates/cards/email_contacts_card.html:
--------------------------------------------------------------------------------
1 |
2 |
5 |
6 | {% if uses_context %}
7 | {% with show_company_name=1 view_action_button=1 email_render_pk=email.pk %}
8 | {% include "cards/lead_contacts_combined_table.html" %}
9 | {% endwith %}
10 | {% else %}
11 | {% with show_company_name=1 view_action_button=1 %}
12 | {% include "cards/lead_contacts_combined_table.html" %}
13 | {% endwith %}
14 | {% endif %}
15 |
16 |
--------------------------------------------------------------------------------
/emails/templates/cards/email_status.html:
--------------------------------------------------------------------------------
1 |
2 | {% if email.status == 'draft' %}
3 | Draft
4 | {% elif email.status == 'scheduled' %}
5 | Scheduled
6 | {% elif email.status == 'sent' %}
7 | Sent
8 | {% endif %}
9 |
--------------------------------------------------------------------------------
/emails/templates/email_change_type.html:
--------------------------------------------------------------------------------
1 | {% extends 'global/forms.html' %}
2 | {% block basetitle %}
3 | Change Email Type
4 | {% endblock %}
5 |
6 | {% block title %}
7 | Change Email Type
8 | {% endblock %}
9 |
10 | {% block formbodyheader %}
11 | Current type: {{ email.email_type }}
12 | {% endblock %}
13 |
14 | {% block js %}
15 |
20 | {% endblock %}
--------------------------------------------------------------------------------
/emails/templates/email_compose_forms.html:
--------------------------------------------------------------------------------
1 | {% extends 'global/forms.html' %}
2 |
3 | {% block formbodyfooter %}
4 |
5 | You can reference fields which are mail-merged in the email body for each recipient, such as:
6 | {% verbatim %}{{ contact.first_name }} {{ contact.last_name }} {{ company.name }}{% endverbatim %}
7 |
8 | {% endblock %}
9 |
10 | {% block formheader %}
11 | {{ block.super }}
12 | {% if existing %}
13 |
26 | {% endif %}
27 | {% endblock %}
--------------------------------------------------------------------------------
/emails/templates/email_compose_from_company.html:
--------------------------------------------------------------------------------
1 | {% extends 'email_compose_forms.html' %}
2 | {% block basetitle %}
3 | {% if existing %}Edit{% else %}New{% endif %} Email
4 | {% endblock %}
5 |
6 | {% block title %}
7 | {% if existing %}Edit{% else %}New{% endif %} Email From Company
8 | {% endblock %}
9 |
10 | {% block js %}
11 |
18 | {% endblock %}
--------------------------------------------------------------------------------
/emails/templates/email_compose_from_contacts.html:
--------------------------------------------------------------------------------
1 | {% extends 'email_compose_forms.html' %}
2 | {% block basetitle %}
3 | {% if existing %}Edit{% else %}New{% endif %} Email
4 | {% endblock %}
5 | {% block title %}
6 | {% if existing %}Edit{% else %}New{% endif %} Email From Contacts
7 | {% endblock %}
8 |
9 | {% block js %}
10 |
15 | {% endblock %}
--------------------------------------------------------------------------------
/emails/templates/email_compose_from_industry.html:
--------------------------------------------------------------------------------
1 | {% extends 'email_compose_forms.html' %}
2 | {% block basetitle %}
3 | {% if existing %}Edit{% else %}New{% endif %} Email
4 | {% endblock %}
5 |
6 | {% block title %}
7 | {% if existing %}Edit{% else %}New{% endif %} Email From Industry
8 | {% endblock %}
9 |
10 | {% block js %}
11 |
19 | {% endblock %}
--------------------------------------------------------------------------------
/emails/templates/email_delete.html:
--------------------------------------------------------------------------------
1 | {% extends 'email_detail.html' %}
2 | {% block content %}
3 |
4 |
5 |
10 |
11 |
12 | Are you sure you want to delete this email? {{ email }}
13 |
14 |
19 |
20 |
21 |
22 |
23 | {{ block.super }}
24 |
25 | {% endblock %}
--------------------------------------------------------------------------------
/emails/templates/email_sent.html:
--------------------------------------------------------------------------------
1 | {% extends 'global/base.html' %}
--------------------------------------------------------------------------------
/emails/tests.py:
--------------------------------------------------------------------------------
1 | from django.test import TestCase
2 |
3 | # Create your tests here.
4 |
--------------------------------------------------------------------------------
/hackathons/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/fuseumass/hackerforce/dfb6ac1304a7db21853765de9da795e8e9ef20bf/hackathons/__init__.py
--------------------------------------------------------------------------------
/hackathons/admin.py:
--------------------------------------------------------------------------------
1 | from django.contrib import admin
2 | from .models import Tier, Perk, Hackathon, Sponsorship
3 |
4 | # Register your models here.
5 |
6 | admin.site.register(Tier)
7 | admin.site.register(Perk)
8 | admin.site.register(Hackathon)
9 | admin.site.register(Sponsorship)
10 |
--------------------------------------------------------------------------------
/hackathons/apps.py:
--------------------------------------------------------------------------------
1 | from django.apps import AppConfig
2 |
3 |
4 | class HackathonsConfig(AppConfig):
5 | name = 'hackathons'
6 |
--------------------------------------------------------------------------------
/hackathons/migrations/0002_auto_20181206_1545.py:
--------------------------------------------------------------------------------
1 | # Generated by Django 2.1.2 on 2018-12-06 15:45
2 |
3 | from django.db import migrations, models
4 |
5 |
6 | class Migration(migrations.Migration):
7 |
8 | dependencies = [
9 | ('hackathons', '0001_initial'),
10 | ]
11 |
12 | operations = [
13 | migrations.AlterField(
14 | model_name='sponsorship',
15 | name='status',
16 | field=models.CharField(choices=[('pending', 'Pending'), ('received', 'Recieved')], max_length=12),
17 | ),
18 | ]
19 |
--------------------------------------------------------------------------------
/hackathons/migrations/0003_auto_20190630_1745.py:
--------------------------------------------------------------------------------
1 | # Generated by Django 2.1.1 on 2019-06-30 21:45
2 |
3 | from django.db import migrations, models
4 | import django.db.models.deletion
5 |
6 |
7 | class Migration(migrations.Migration):
8 |
9 | dependencies = [
10 | ('hackathons', '0002_auto_20181206_1545'),
11 | ]
12 |
13 | operations = [
14 | migrations.RemoveField(
15 | model_name='sponsorship',
16 | name='tiers',
17 | ),
18 | migrations.AddField(
19 | model_name='sponsorship',
20 | name='tiers',
21 | field=models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, to='hackathons.Tier'),
22 | ),
23 | ]
24 |
--------------------------------------------------------------------------------
/hackathons/migrations/0004_auto_20190630_1752.py:
--------------------------------------------------------------------------------
1 | # Generated by Django 2.1.1 on 2019-06-30 21:52
2 |
3 | from django.db import migrations, models
4 | import django.db.models.deletion
5 |
6 |
7 | class Migration(migrations.Migration):
8 |
9 | dependencies = [
10 | ('hackathons', '0003_auto_20190630_1745'),
11 | ]
12 |
13 | operations = [
14 | migrations.AlterField(
15 | model_name='sponsorship',
16 | name='tiers',
17 | field=models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='sponsorships', to='hackathons.Tier'),
18 | ),
19 | ]
20 |
--------------------------------------------------------------------------------
/hackathons/migrations/0005_auto_20190630_1811.py:
--------------------------------------------------------------------------------
1 | # Generated by Django 2.1.1 on 2019-06-30 22:11
2 |
3 | from django.db import migrations
4 |
5 |
6 | class Migration(migrations.Migration):
7 |
8 | dependencies = [
9 | ('hackathons', '0004_auto_20190630_1752'),
10 | ]
11 |
12 | operations = [
13 | migrations.RenameField(
14 | model_name='sponsorship',
15 | old_name='tiers',
16 | new_name='tier',
17 | ),
18 | ]
19 |
--------------------------------------------------------------------------------
/hackathons/migrations/0006_sponsorship_notes.py:
--------------------------------------------------------------------------------
1 | # Generated by Django 2.1.1 on 2019-07-01 04:08
2 |
3 | from django.db import migrations, models
4 |
5 |
6 | class Migration(migrations.Migration):
7 |
8 | dependencies = [
9 | ('hackathons', '0005_auto_20190630_1811'),
10 | ]
11 |
12 | operations = [
13 | migrations.AddField(
14 | model_name='sponsorship',
15 | name='notes',
16 | field=models.TextField(blank=True),
17 | ),
18 | ]
19 |
--------------------------------------------------------------------------------
/hackathons/migrations/0008_auto_20190702_0352.py:
--------------------------------------------------------------------------------
1 | # Generated by Django 2.1.9 on 2019-07-02 03:52
2 |
3 | from django.db import migrations, models
4 |
5 |
6 | class Migration(migrations.Migration):
7 |
8 | dependencies = [
9 | ('hackathons', '0007_auto_20190702_0350'),
10 | ]
11 |
12 | operations = [
13 | migrations.AlterField(
14 | model_name='lead',
15 | name='role',
16 | field=models.CharField(choices=[('no_role', 'None'), ('primary', 'Primary')], max_length=20),
17 | ),
18 | migrations.AlterField(
19 | model_name='lead',
20 | name='status',
21 | field=models.CharField(choices=[('uncontacted', 'Uncontacted'), ('contacted', 'Contacted')], max_length=20),
22 | ),
23 | migrations.AlterField(
24 | model_name='sponsorship',
25 | name='status',
26 | field=models.CharField(choices=[('preparing', 'Preparing'), ('contacted', 'Contacted'), ('responded', 'Responded'), ('confirmed', 'Confirmed'), ('denied', 'Denied'), ('ghosted', 'Ghosted'), ('paid', 'Paid')], default='preparing', max_length=20),
27 | ),
28 | ]
29 |
--------------------------------------------------------------------------------
/hackathons/migrations/0009_auto_20190702_0508.py:
--------------------------------------------------------------------------------
1 | # Generated by Django 2.1.9 on 2019-07-02 05:08
2 |
3 | from django.db import migrations, models
4 |
5 |
6 | class Migration(migrations.Migration):
7 |
8 | dependencies = [
9 | ('hackathons', '0008_auto_20190702_0352'),
10 | ]
11 |
12 | operations = [
13 | migrations.AlterField(
14 | model_name='sponsorship',
15 | name='contribution',
16 | field=models.IntegerField(default=0),
17 | ),
18 | ]
19 |
--------------------------------------------------------------------------------
/hackathons/migrations/0010_auto_20190702_0508.py:
--------------------------------------------------------------------------------
1 | # Generated by Django 2.1.9 on 2019-07-02 05:08
2 |
3 | from django.db import migrations, models
4 |
5 |
6 | class Migration(migrations.Migration):
7 |
8 | dependencies = [
9 | ('hackathons', '0009_auto_20190702_0508'),
10 | ]
11 |
12 | operations = [
13 | migrations.AlterField(
14 | model_name='sponsorship',
15 | name='contribution',
16 | field=models.IntegerField(blank=True),
17 | ),
18 | ]
19 |
--------------------------------------------------------------------------------
/hackathons/migrations/0011_auto_20190702_0510.py:
--------------------------------------------------------------------------------
1 | # Generated by Django 2.1.9 on 2019-07-02 05:10
2 |
3 | from django.db import migrations, models
4 |
5 |
6 | class Migration(migrations.Migration):
7 |
8 | dependencies = [
9 | ('hackathons', '0010_auto_20190702_0508'),
10 | ]
11 |
12 | operations = [
13 | migrations.AlterField(
14 | model_name='sponsorship',
15 | name='contribution',
16 | field=models.IntegerField(blank=True, default=0),
17 | ),
18 | ]
19 |
--------------------------------------------------------------------------------
/hackathons/migrations/0012_auto_20190702_0556.py:
--------------------------------------------------------------------------------
1 | # Generated by Django 2.1.9 on 2019-07-02 05:56
2 |
3 | from django.db import migrations
4 |
5 |
6 | class Migration(migrations.Migration):
7 |
8 | dependencies = [
9 | ('companies', '0005_auto_20190702_0527'),
10 | ('contacts', '0006_auto_20190702_0527'),
11 | ('hackathons', '0011_auto_20190702_0510'),
12 | ]
13 |
14 | operations = [
15 | migrations.AlterUniqueTogether(
16 | name='lead',
17 | unique_together={('sponsorship', 'contact')},
18 | ),
19 | migrations.AlterUniqueTogether(
20 | name='sponsorship',
21 | unique_together={('hackathon', 'company')},
22 | ),
23 | ]
24 |
--------------------------------------------------------------------------------
/hackathons/migrations/0013_auto_20190702_0649.py:
--------------------------------------------------------------------------------
1 | # Generated by Django 2.1.9 on 2019-07-02 06:49
2 |
3 | from django.db import migrations, models
4 |
5 |
6 | class Migration(migrations.Migration):
7 |
8 | dependencies = [
9 | ('hackathons', '0012_auto_20190702_0556'),
10 | ]
11 |
12 | operations = [
13 | migrations.RemoveField(
14 | model_name='lead',
15 | name='notes',
16 | ),
17 | migrations.AlterField(
18 | model_name='lead',
19 | name='status',
20 | field=models.CharField(choices=[('contacted', 'Contacted'), ('responded', 'Responded')], max_length=20),
21 | ),
22 | migrations.AlterField(
23 | model_name='sponsorship',
24 | name='status',
25 | field=models.CharField(choices=[('contacted', 'Contacted'), ('responded', 'Responded'), ('confirmed', 'Confirmed'), ('denied', 'Denied'), ('ghosted', 'Ghosted'), ('paid', 'Paid')], default='contacted', max_length=20),
26 | ),
27 | ]
28 |
--------------------------------------------------------------------------------
/hackathons/migrations/0014_auto_20190703_0453.py:
--------------------------------------------------------------------------------
1 | # Generated by Django 2.1.9 on 2019-07-03 04:53
2 |
3 | from django.db import migrations, models
4 |
5 |
6 | class Migration(migrations.Migration):
7 |
8 | dependencies = [
9 | ('hackathons', '0013_auto_20190702_0649'),
10 | ]
11 |
12 | operations = [
13 | migrations.AddField(
14 | model_name='lead',
15 | name='times_contacted',
16 | field=models.IntegerField(blank=True, default=1),
17 | ),
18 | migrations.AlterField(
19 | model_name='lead',
20 | name='status',
21 | field=models.CharField(choices=[('contacted', 'Contacted'), ('ghosted', 'Ghosted'), ('responded', 'Responded')], default='contacted', max_length=20),
22 | ),
23 | ]
24 |
--------------------------------------------------------------------------------
/hackathons/migrations/0015_auto_20190712_0526.py:
--------------------------------------------------------------------------------
1 | # Generated by Django 2.1.10 on 2019-07-12 05:26
2 |
3 | from django.db import migrations
4 |
5 |
6 | class Migration(migrations.Migration):
7 |
8 | dependencies = [
9 | ('hackathons', '0014_auto_20190703_0453'),
10 | ]
11 |
12 | operations = [
13 | migrations.AlterModelOptions(
14 | name='hackathon',
15 | options={'ordering': ('name',)},
16 | ),
17 | migrations.AlterModelOptions(
18 | name='lead',
19 | options={'ordering': ('contact__name', 'contact__company__name')},
20 | ),
21 | migrations.AlterModelOptions(
22 | name='perk',
23 | options={'ordering': ('name',)},
24 | ),
25 | migrations.AlterModelOptions(
26 | name='sponsorship',
27 | options={'ordering': ('company__name', 'hackathon__name')},
28 | ),
29 | migrations.AlterModelOptions(
30 | name='tier',
31 | options={'ordering': ('name',)},
32 | ),
33 | ]
34 |
--------------------------------------------------------------------------------
/hackathons/migrations/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/fuseumass/hackerforce/dfb6ac1304a7db21853765de9da795e8e9ef20bf/hackathons/migrations/__init__.py
--------------------------------------------------------------------------------
/hackathons/templates/cards/lead_status.html:
--------------------------------------------------------------------------------
1 |
2 | {% if not lead %}
3 | Uncontacted
4 | {% elif lead.status == 'contacted' %}
5 | Contacted
6 | {% elif lead.status == 'responded' %}
7 | Responded
8 | {% elif lead.status == 'ghosted' %}
9 | Ghosted
10 | {% endif %}
11 |
--------------------------------------------------------------------------------
/hackathons/templates/cards/sponsorship_company_table.html:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/fuseumass/hackerforce/dfb6ac1304a7db21853765de9da795e8e9ef20bf/hackathons/templates/cards/sponsorship_company_table.html
--------------------------------------------------------------------------------
/hackathons/templates/cards/sponsorship_status.html:
--------------------------------------------------------------------------------
1 |
2 | {% if not sponsorship %}
3 | Uncontacted
4 | {% elif sponsorship.status == 'contacted' %}
5 | Contacted
6 | {% elif sponsorship.status == 'responded' %}
7 | Responded
8 | {% elif sponsorship.status == 'confirmed' %}
9 | Confirmed
10 | {% elif sponsorship.status == 'denied' %}
11 | Denied
12 | {% elif sponsorship.status == 'ghosted' %}
13 | Ghosted
14 | {% elif sponsorship.status == 'paid' %}
15 | Paid
16 | {% endif %}
17 |
--------------------------------------------------------------------------------
/hackathons/templates/hackathon_detail.html:
--------------------------------------------------------------------------------
1 | {% extends 'global/base.html' %}
2 |
3 | {% block content %}
4 | {% endblock %}
5 |
--------------------------------------------------------------------------------
/hackathons/templates/hackathon_edit.html:
--------------------------------------------------------------------------------
1 | {% extends 'global/forms.html' %}
2 |
3 | {% block title %}
4 | Edit Hackathon
5 | {% endblock %}
6 |
7 | {% block js %}
8 |
14 |
22 | {% endblock %}
--------------------------------------------------------------------------------
/hackathons/templates/hackathon_new.html:
--------------------------------------------------------------------------------
1 | {% extends 'global/forms.html' %}
2 |
3 | {% block title %}
4 | New Hackathon
5 | {% endblock %}
6 |
7 | {% block js %}
8 |
14 | {% endblock %}
--------------------------------------------------------------------------------
/hackathons/templates/lead_delete.html:
--------------------------------------------------------------------------------
1 | {% extends 'lead_detail.html' %}
2 | {% block content %}
3 |
4 |
5 |
10 |
11 |
12 | Are you sure you want to delete this lead? This will mark {{ lead.contact }} as uncontacted for {{ lead.sponsorship.hackathon }} and remove all affiliated data!
13 |
14 |
15 | This will not delete the contact. If you would like to globally delete the contact instead then that will delete this affiliated lead object as well.
16 |
17 |
18 |
23 |
24 |
25 |
26 |
27 | {{ block.super }}
28 |
29 | {% endblock %}
--------------------------------------------------------------------------------
/hackathons/templates/lead_new.html:
--------------------------------------------------------------------------------
1 | {% extends 'global/forms.html' %}
2 |
3 | {% block title %}
4 | New Lead
5 | {% endblock %}
6 |
--------------------------------------------------------------------------------
/hackathons/templates/perk_edit.html:
--------------------------------------------------------------------------------
1 | {% extends 'global/forms.html' %}
2 |
3 | {% block title %}
4 | Edit Perk
5 | {% endblock %}
6 |
--------------------------------------------------------------------------------
/hackathons/templates/perk_new.html:
--------------------------------------------------------------------------------
1 | {% extends 'global/forms.html' %}
2 |
3 | {% block title %}
4 | New Perk
5 | {% endblock %}
6 |
--------------------------------------------------------------------------------
/hackathons/templates/sponsorship_assign_organizers.html:
--------------------------------------------------------------------------------
1 | {% extends 'global/forms.html' %}
2 |
3 | {% block title %}
4 | Assign Organizers to Sponsorship
5 | {% endblock %}
6 |
7 | {% block formheader %}
8 | {{ block.super }}
9 |
14 | {% endblock %}
15 |
16 | {% block js %}
17 |
22 |
27 | {% endblock %}
--------------------------------------------------------------------------------
/hackathons/templates/sponsorship_edit.html:
--------------------------------------------------------------------------------
1 | {% extends 'global/forms.html' %}
2 |
3 | {% block title %}
4 | Edit Sponsorship
5 | {% endblock %}
6 |
7 | {% block formheader %}
8 | {{ block.super }}
9 |
14 | {% endblock %}
15 |
16 | {% block js %}
17 |
24 | {% endblock %}
--------------------------------------------------------------------------------
/hackathons/templates/sponsorship_new.html:
--------------------------------------------------------------------------------
1 | {% extends 'global/forms.html' %}
2 |
3 | {% block title %}
4 | New Sponsorship
5 | {% endblock %}
6 |
7 | {% block js %}
8 |
15 | {% endblock %}
--------------------------------------------------------------------------------
/hackathons/templates/sponsorships_for_user_list.html:
--------------------------------------------------------------------------------
1 | {% extends 'global/forms.html' %}
2 |
3 | {% block title %}
4 | Select User to View Assigned Sponsorships
5 | {% endblock %}
6 |
7 | {% block js %}
8 |
13 | {% endblock %}
--------------------------------------------------------------------------------
/hackathons/templates/sponsorships_for_user_modify.html:
--------------------------------------------------------------------------------
1 | {% extends 'global/forms.html' %}
2 |
3 | {% block title %}
4 | Assign Sponsorships to {{ user }}
5 | {% endblock %}
6 |
7 | {% block formheader %}
8 | {{ block.super }}
9 |
14 | {% endblock %}
15 |
16 | {% block formbodyheader %}
17 | In order to appear on this page, a company must have been added to this hackathon.
18 | {% endblock %}
19 |
20 | {% block js %}
21 |
26 |
34 | {% endblock %}
--------------------------------------------------------------------------------
/hackathons/templates/tier_edit.html:
--------------------------------------------------------------------------------
1 | {% extends 'global/forms.html' %}
2 |
3 | {% block title %}
4 | Edit Tier
5 | {% endblock %}
6 |
--------------------------------------------------------------------------------
/hackathons/templates/tier_new.html:
--------------------------------------------------------------------------------
1 | {% extends 'global/forms.html' %}
2 |
3 | {% block title %}
4 | New Tier
5 | {% endblock %}
6 |
--------------------------------------------------------------------------------
/hackathons/tests.py:
--------------------------------------------------------------------------------
1 | from django.test import TestCase
2 |
3 | # Create your tests here.
4 |
--------------------------------------------------------------------------------
/hackathons/views/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/fuseumass/hackerforce/dfb6ac1304a7db21853765de9da795e8e9ef20bf/hackathons/views/__init__.py
--------------------------------------------------------------------------------
/init.bat:
--------------------------------------------------------------------------------
1 | del db.sqlite3
2 | python manage.py makemigrations
3 | python manage.py migrate
4 | python manage.py shell < init.py
--------------------------------------------------------------------------------
/init.sh:
--------------------------------------------------------------------------------
1 | confirm() {
2 | # call with a prompt string or use a default
3 | read -r -p "${1:-Are you sure? [yes/N]} " response
4 | case "$response" in
5 | [yY][eE][sS])
6 | true
7 | ;;
8 | *)
9 | false
10 | ;;
11 | esac
12 | }
13 |
14 |
15 | # A script that automates the reconstruction of the entire database.
16 | echo "WARNING WARNING WARNING WARNING WARNING"
17 | echo " We are about to delete the local DB. "
18 | echo " Are you sure you want to do this? "
19 | echo "WARNING WARNING WARNING WARNING WARNING"
20 |
21 | confirm || exit 0
22 |
23 | rm -f db.sqlite3
24 | python3 manage.py makemigrations
25 | python3 manage.py migrate
26 | python3 manage.py shell < init.py
27 |
--------------------------------------------------------------------------------
/manage.py:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env python
2 | import os
3 | import sys
4 |
5 | if __name__ == "__main__":
6 | os.environ.setdefault("DJANGO_SETTINGS_MODULE", "website.settings")
7 | try:
8 | from django.core.management import execute_from_command_line
9 | except ImportError as exc:
10 | raise ImportError(
11 | "Couldn't import Django. Are you sure it's installed and "
12 | "available on your PYTHONPATH environment variable? Did you "
13 | "forget to activate a virtual environment?"
14 | )
15 | execute_from_command_line(sys.argv)
16 |
--------------------------------------------------------------------------------
/profiles/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/fuseumass/hackerforce/dfb6ac1304a7db21853765de9da795e8e9ef20bf/profiles/__init__.py
--------------------------------------------------------------------------------
/profiles/admin.py:
--------------------------------------------------------------------------------
1 | from django.contrib import admin
2 | from profiles.models import User
3 |
4 | # Register your models here.
5 | admin.site.register(User)
--------------------------------------------------------------------------------
/profiles/apps.py:
--------------------------------------------------------------------------------
1 | from django.apps import AppConfig
2 |
3 |
4 | class ProfilesConfig(AppConfig):
5 | name = 'profiles'
6 |
--------------------------------------------------------------------------------
/profiles/migrations/0002_user_sponsorships.py:
--------------------------------------------------------------------------------
1 | # Generated by Django 2.2.3 on 2019-07-14 19:37
2 |
3 | from django.db import migrations, models
4 |
5 |
6 | class Migration(migrations.Migration):
7 |
8 | dependencies = [
9 | ('hackathons', '0015_auto_20190712_0526'),
10 | ('profiles', '0001_initial'),
11 | ]
12 |
13 | operations = [
14 | migrations.AddField(
15 | model_name='user',
16 | name='sponsorships',
17 | field=models.ManyToManyField(blank=True, related_name='organizer_contacts', to='hackathons.Sponsorship'),
18 | ),
19 | ]
20 |
--------------------------------------------------------------------------------
/profiles/migrations/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/fuseumass/hackerforce/dfb6ac1304a7db21853765de9da795e8e9ef20bf/profiles/migrations/__init__.py
--------------------------------------------------------------------------------
/profiles/models.py:
--------------------------------------------------------------------------------
1 | from django.db import models
2 |
3 | from django.contrib.auth.models import AbstractUser
4 | from hackathons.models import Hackathon, Sponsorship
5 |
6 | # Create your models here.
7 |
8 |
9 | class User(AbstractUser):
10 | phone = models.CharField(max_length=15, blank=True)
11 | current_hackathon = models.ForeignKey(
12 | Hackathon, on_delete=models.SET_NULL, null=True, related_name="users"
13 | )
14 | sponsorships = models.ManyToManyField(
15 | Sponsorship, blank=True, related_name="organizer_contacts"
16 | )
17 |
18 | def __str__(self):
19 | if self.first_name or self.last_name:
20 | return f"{self.first_name} {self.last_name}"
21 | return self.username
--------------------------------------------------------------------------------
/profiles/templates/activation.html:
--------------------------------------------------------------------------------
1 | {% autoescape off %}
2 | Hi {{ user.username }},
3 | Please click on the link to confirm your registration,
4 |
5 | http://{{ domain }}{% url 'activate' uidb64=uid token=token %}
6 | {% endautoescape %}
--------------------------------------------------------------------------------
/profiles/templates/profile_edit.html:
--------------------------------------------------------------------------------
1 | {% extends 'global/forms.html' %}
2 | {% block basetitle %}
3 | Edit Profile
4 | {% endblock %}
5 | {% block title %}
6 | Edit Profile
7 | {% endblock %}
8 |
--------------------------------------------------------------------------------
/profiles/templates/settings.html:
--------------------------------------------------------------------------------
1 | {% extends 'global/base.html' %}
2 |
3 | {% block basetitle %}
4 | Settings
5 | {% endblock %}
6 |
7 | {% block content %}
8 |
9 |
10 | {% include 'cards/form-profile.html' %}
11 |
12 |
13 | {% include 'cards/form-email-preferences.html' %}
14 |
15 |
16 | {% endblock %}
17 |
--------------------------------------------------------------------------------
/profiles/tests.py:
--------------------------------------------------------------------------------
1 | from django.test import TestCase
2 |
3 | # Create your tests here.
4 |
--------------------------------------------------------------------------------
/profiles/token.py:
--------------------------------------------------------------------------------
1 | from django.contrib.auth.tokens import PasswordResetTokenGenerator
2 | from django.utils import six
3 | class TokenGenerator(PasswordResetTokenGenerator):
4 | def _make_hash_value(self, user, timestamp):
5 | return (
6 | six.text_type(user.pk) + six.text_type(timestamp) +
7 | six.text_type(user.is_active)
8 | )
9 | account_activation_token = TokenGenerator()
--------------------------------------------------------------------------------
/profiles/urls.py:
--------------------------------------------------------------------------------
1 | from django.urls import path
2 | from django.conf.urls import url
3 |
4 | from . import views
5 |
6 | app_name = "profiles"
7 | urlpatterns = [
8 | path("", views.settings_view, name="settings"),
9 | path("edit", views.profile_edit, name="edit"),
10 | ]
11 |
--------------------------------------------------------------------------------
/safe_init.sh:
--------------------------------------------------------------------------------
1 | #!/bin/bash
2 | python manage.py shell -c'from profiles.models import User; User.objects.get(username="admin")';
3 | if [[ "$?" == "1" ]]; then
4 | echo Empty database. Running init script...
5 | chmod +x init.sh
6 | ./init.sh
7 | else
8 | echo Admin user exists. Running migrate...
9 | python manage.py migrate
10 | fi
11 |
--------------------------------------------------------------------------------
/shared/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/fuseumass/hackerforce/dfb6ac1304a7db21853765de9da795e8e9ef20bf/shared/__init__.py
--------------------------------------------------------------------------------
/shared/contextprocessors.py:
--------------------------------------------------------------------------------
1 | from django.contrib import messages
2 | from hackathons.models import Hackathon
3 |
4 | def fill_current_hackathon_as_h(request):
5 | h = None
6 | try:
7 | h = request.hackathon
8 | except AttributeError:
9 | pass
10 | return {"h": h}
--------------------------------------------------------------------------------
/shared/forms/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/fuseumass/hackerforce/dfb6ac1304a7db21853765de9da795e8e9ef20bf/shared/forms/__init__.py
--------------------------------------------------------------------------------
/shared/forms/fields.py:
--------------------------------------------------------------------------------
1 | import multiselectfield
2 |
3 | class MultiSelectField(multiselectfield.MultiSelectField):
4 | """ Fix for https://github.com/goinnn/django-multiselectfield/issues/74 """
5 | def value_to_string(self, obj):
6 | value = self.value_from_object(obj)
7 | return self.get_prep_value(value)
8 |
--------------------------------------------------------------------------------
/shared/middleware.py:
--------------------------------------------------------------------------------
1 | from django.shortcuts import get_object_or_404
2 | from django.contrib import messages
3 | from hackathons.models import Hackathon
4 |
5 | class CurrentHackathonMiddleware(object):
6 | def __init__(self, get_response):
7 | self.get_response = get_response
8 |
9 | def __call__(self, request):
10 | return self.get_response(request)
11 |
12 | def process_view(self, request, view_func, view_args, view_kwargs):
13 | pk = view_kwargs.get('h_pk', None)
14 | if pk:
15 | request.hackathon = get_object_or_404(Hackathon, pk=pk)
16 |
--------------------------------------------------------------------------------
/shared/packet.py:
--------------------------------------------------------------------------------
1 | import os
2 | from django.conf import settings
3 | import requests
4 |
5 | def get_packet_file_path():
6 | return os.path.join(settings.PROJECT_ROOT, 'static', settings.SPONSORSHIP_PACKET_FILE) if settings.SPONSORSHIP_PACKET_FILE else None
7 |
8 | def fetch_packet():
9 | if settings.SPONSORSHIP_PACKET_FILE and settings.SPONSORSHIP_PACKET_URL:
10 | if not os.path.exists(get_packet_file_path()):
11 | print("Downloading the sponsorship packet to: {}", get_packet_file_path())
12 |
13 | r = requests.get(settings.SPONSORSHIP_PACKET_URL, stream=True)
14 | if r.status_code == 200:
15 | with open(get_packet_file_path(), 'wb') as f:
16 | for chunk in r.iter_content(1024):
17 | f.write(chunk)
--------------------------------------------------------------------------------
/shared/storage.py:
--------------------------------------------------------------------------------
1 | from whitenoise import storage
2 | class CompressedManifestStaticFilesStorage(storage.CompressedManifestStaticFilesStorage):
3 | manifest_strict = False
--------------------------------------------------------------------------------
/shared/templatetags/modify_get.py:
--------------------------------------------------------------------------------
1 | from django import template
2 | import urllib
3 |
4 | register = template.Library()
5 |
6 |
7 | @register.simple_tag(takes_context=True)
8 | def modify_get(context, arg_name, arg_value):
9 | get = dict({k: v if type(v) == str else v[0] if v else None for k, v in context.request.GET.items()})
10 | if arg_name in get:
11 | del get[arg_name]
12 | existing = urllib.parse.urlencode(get)
13 | if existing:
14 | existing = existing + '&'
15 | return f"?{existing}{arg_name}={arg_value}"
--------------------------------------------------------------------------------
/shared/templatetags/order_by.py:
--------------------------------------------------------------------------------
1 | from django import template
2 |
3 | register = template.Library()
4 |
5 | @register.simple_tag(takes_context=True)
6 | def order_by(context, arg):
7 | return order_by_custom(context, "order_by", arg)
8 |
9 | @register.simple_tag(takes_context=True)
10 | def order_by_custom(context, get_name, arg):
11 | existing_arg = context.request.GET.get(get_name)
12 | existing = '?' + context.request.GET.urlencode()
13 | existing = existing.replace(f'&{get_name}={existing_arg}', '')
14 | existing = existing.replace(f'?{get_name}={existing_arg}', '')
15 | order_by_arg = f"-{arg}" if existing_arg == arg else arg
16 | if order_by_arg[:2] == "--":
17 | order_by_arg = order_by_arg[2:]
18 | if not existing.startswith('?'):
19 | existing = '?' + existing
20 | return f"{existing}&{get_name}={order_by_arg}"
--------------------------------------------------------------------------------
/templates/global/header.html:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/fuseumass/hackerforce/dfb6ac1304a7db21853765de9da795e8e9ef20bf/templates/global/header.html
--------------------------------------------------------------------------------
/website/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/fuseumass/hackerforce/dfb6ac1304a7db21853765de9da795e8e9ef20bf/website/__init__.py
--------------------------------------------------------------------------------
/website/jinja2.py:
--------------------------------------------------------------------------------
1 | from django.contrib.staticfiles.storage import staticfiles_storage
2 | from django.urls import reverse
3 |
4 | from jinja2 import Environment
5 |
6 | # from widget_tweaks import render_field, add_class, set_attr
7 | import widget_tweaks
8 |
9 | def environment(**options):
10 | env = Environment(**options)
11 | env.globals.update(
12 | {
13 | "static": staticfiles_storage.url,
14 | "url": reverse,
15 | "render_field": widget_tweaks.templatetags.widget_tweaks.render_field,
16 | }
17 | )
18 | env.filters.update(
19 | {
20 | "add_class": widget_tweaks.templatetags.widget_tweaks.add_class,
21 | "set_attr": widget_tweaks.templatetags.widget_tweaks.set_attr,
22 | }
23 | )
24 | return env
25 |
--------------------------------------------------------------------------------
/website/static/global/custom.css:
--------------------------------------------------------------------------------
1 | .dashboard-nav-text {
2 | text-overflow: ellipsis;
3 | overflow: hidden;
4 | white-space: nowrap;
5 | }
6 | .nav-link.nav-selected {
7 | color: #495057 !important;
8 | border-color: #495057 !important;
9 | }
10 | a.button {
11 | text-decoration: none !important;
12 | }
13 | .tag.tag-yellow {
14 | color: black;
15 | }
16 | .tag-brown {
17 | background-color: brown;
18 | color: #fff;
19 | }
--------------------------------------------------------------------------------
/website/static/global/footer.css:
--------------------------------------------------------------------------------
1 | body {
2 | display: flex;
3 | flex-direction: column;
4 | }
5 | .content {
6 | flex: 1 0 auto;
7 | }
8 | .footer {
9 | flex-shrink: 0;
10 | }
11 |
--------------------------------------------------------------------------------
/website/static/hackerforce-logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/fuseumass/hackerforce/dfb6ac1304a7db21853765de9da795e8e9ef20bf/website/static/hackerforce-logo.png
--------------------------------------------------------------------------------
/website/static/humans.txt:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/fuseumass/hackerforce/dfb6ac1304a7db21853765de9da795e8e9ef20bf/website/static/humans.txt
--------------------------------------------------------------------------------
/website/static/img/HUM_logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/fuseumass/hackerforce/dfb6ac1304a7db21853765de9da795e8e9ef20bf/website/static/img/HUM_logo.png
--------------------------------------------------------------------------------
/website/static/tabler/fonts/feather/feather-webfont.eot:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/fuseumass/hackerforce/dfb6ac1304a7db21853765de9da795e8e9ef20bf/website/static/tabler/fonts/feather/feather-webfont.eot
--------------------------------------------------------------------------------
/website/static/tabler/fonts/feather/feather-webfont.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/fuseumass/hackerforce/dfb6ac1304a7db21853765de9da795e8e9ef20bf/website/static/tabler/fonts/feather/feather-webfont.ttf
--------------------------------------------------------------------------------
/website/static/tabler/fonts/feather/feather-webfont.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/fuseumass/hackerforce/dfb6ac1304a7db21853765de9da795e8e9ef20bf/website/static/tabler/fonts/feather/feather-webfont.woff
--------------------------------------------------------------------------------
/website/static/tabler/images/browsers/aol-explorer.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/website/static/tabler/images/browsers/blackberry.svg:
--------------------------------------------------------------------------------
1 | blackberry Created with Sketch. Layer 1
--------------------------------------------------------------------------------
/website/static/tabler/images/crypto-currencies/bitcoin.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/website/static/tabler/images/crypto-currencies/dash.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/website/static/tabler/images/crypto-currencies/eos.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/website/static/tabler/images/crypto-currencies/ethereum.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/website/static/tabler/images/crypto-currencies/litecoin.svg:
--------------------------------------------------------------------------------
1 | Litecoin
--------------------------------------------------------------------------------
/website/static/tabler/images/crypto-currencies/ripple.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/website/static/tabler/images/flags/ae.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/website/static/tabler/images/flags/ag.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/website/static/tabler/images/flags/am.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/website/static/tabler/images/flags/at.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/website/static/tabler/images/flags/ax.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/website/static/tabler/images/flags/az.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/website/static/tabler/images/flags/bb.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/website/static/tabler/images/flags/bd.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/website/static/tabler/images/flags/be.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/website/static/tabler/images/flags/bf.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/website/static/tabler/images/flags/bg.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/website/static/tabler/images/flags/bh.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/website/static/tabler/images/flags/bj.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/website/static/tabler/images/flags/bl.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/website/static/tabler/images/flags/bq.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/website/static/tabler/images/flags/bs.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/website/static/tabler/images/flags/bv.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/website/static/tabler/images/flags/bw.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/website/static/tabler/images/flags/ca.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
--------------------------------------------------------------------------------
/website/static/tabler/images/flags/cd.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/website/static/tabler/images/flags/cf.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/website/static/tabler/images/flags/cg.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/website/static/tabler/images/flags/ch.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/website/static/tabler/images/flags/ci.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/website/static/tabler/images/flags/cl.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/website/static/tabler/images/flags/cm.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/website/static/tabler/images/flags/cn.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/website/static/tabler/images/flags/co.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/website/static/tabler/images/flags/cr.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/website/static/tabler/images/flags/cu.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/website/static/tabler/images/flags/cw.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/website/static/tabler/images/flags/cz.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/website/static/tabler/images/flags/de.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/website/static/tabler/images/flags/dj.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/website/static/tabler/images/flags/dk.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/website/static/tabler/images/flags/dz.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/website/static/tabler/images/flags/ee.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/website/static/tabler/images/flags/eh.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/website/static/tabler/images/flags/eu.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/website/static/tabler/images/flags/fi.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/website/static/tabler/images/flags/fm.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/website/static/tabler/images/flags/fo.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/website/static/tabler/images/flags/fr.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/website/static/tabler/images/flags/ga.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/website/static/tabler/images/flags/gb-eng.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/website/static/tabler/images/flags/gb-sct.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/website/static/tabler/images/flags/gb.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/website/static/tabler/images/flags/gf.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/website/static/tabler/images/flags/gg.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/website/static/tabler/images/flags/gh.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/website/static/tabler/images/flags/gl.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/website/static/tabler/images/flags/gm.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/website/static/tabler/images/flags/gn.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/website/static/tabler/images/flags/gp.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/website/static/tabler/images/flags/gr.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/website/static/tabler/images/flags/gw.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/website/static/tabler/images/flags/gy.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/website/static/tabler/images/flags/hn.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/website/static/tabler/images/flags/hu.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/website/static/tabler/images/flags/id.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/website/static/tabler/images/flags/ie.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/website/static/tabler/images/flags/il.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/website/static/tabler/images/flags/in.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/website/static/tabler/images/flags/is.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/website/static/tabler/images/flags/it.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/website/static/tabler/images/flags/jm.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/website/static/tabler/images/flags/jo.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/website/static/tabler/images/flags/jp.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/website/static/tabler/images/flags/kn.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/website/static/tabler/images/flags/kp.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/website/static/tabler/images/flags/kw.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/website/static/tabler/images/flags/la.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/website/static/tabler/images/flags/lc.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/website/static/tabler/images/flags/lr.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/website/static/tabler/images/flags/lt.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/website/static/tabler/images/flags/lu.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/website/static/tabler/images/flags/lv.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/website/static/tabler/images/flags/ly.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/website/static/tabler/images/flags/ma.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/website/static/tabler/images/flags/mc.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/website/static/tabler/images/flags/mf.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/website/static/tabler/images/flags/mg.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/website/static/tabler/images/flags/mh.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/website/static/tabler/images/flags/mk.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/website/static/tabler/images/flags/ml.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/website/static/tabler/images/flags/mm.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/website/static/tabler/images/flags/mq.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/website/static/tabler/images/flags/mr.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/website/static/tabler/images/flags/mu.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/website/static/tabler/images/flags/mv.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/website/static/tabler/images/flags/na.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/website/static/tabler/images/flags/nc.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/website/static/tabler/images/flags/ne.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/website/static/tabler/images/flags/ng.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/website/static/tabler/images/flags/nl.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/website/static/tabler/images/flags/no.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/website/static/tabler/images/flags/nr.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/website/static/tabler/images/flags/pa.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/website/static/tabler/images/flags/pe.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/website/static/tabler/images/flags/ph.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/website/static/tabler/images/flags/pk.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/website/static/tabler/images/flags/pl.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/website/static/tabler/images/flags/pm.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/website/static/tabler/images/flags/pr.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/website/static/tabler/images/flags/ps.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/website/static/tabler/images/flags/pw.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/website/static/tabler/images/flags/qa.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/website/static/tabler/images/flags/re.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/website/static/tabler/images/flags/ro.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/website/static/tabler/images/flags/ru.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/website/static/tabler/images/flags/rw.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/website/static/tabler/images/flags/sb.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/website/static/tabler/images/flags/sc.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/website/static/tabler/images/flags/sd.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/website/static/tabler/images/flags/se.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/website/static/tabler/images/flags/sg.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/website/static/tabler/images/flags/sj.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/website/static/tabler/images/flags/sl.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/website/static/tabler/images/flags/sn.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/website/static/tabler/images/flags/so.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/website/static/tabler/images/flags/sr.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/website/static/tabler/images/flags/ss.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/website/static/tabler/images/flags/st.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/website/static/tabler/images/flags/sy.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/website/static/tabler/images/flags/td.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/website/static/tabler/images/flags/tf.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/website/static/tabler/images/flags/tg.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/website/static/tabler/images/flags/th.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/website/static/tabler/images/flags/tk.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/website/static/tabler/images/flags/tl.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/website/static/tabler/images/flags/tn.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/website/static/tabler/images/flags/to.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/website/static/tabler/images/flags/tr.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/website/static/tabler/images/flags/tt.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/website/static/tabler/images/flags/tw.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/website/static/tabler/images/flags/tz.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/website/static/tabler/images/flags/ua.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/website/static/tabler/images/flags/vc.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/website/static/tabler/images/flags/ve.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/website/static/tabler/images/flags/vn.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/website/static/tabler/images/flags/wf.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/website/static/tabler/images/flags/ws.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/website/static/tabler/images/flags/ye.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/website/static/tabler/images/flags/yt.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/website/static/tabler/images/flags/za.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/website/static/tabler/plugins/charts-c3/plugin.js:
--------------------------------------------------------------------------------
1 | require.config({
2 | shim: {
3 | 'c3': ['d3', 'core'],
4 | 'd3': ['core'],
5 | },
6 | paths: {
7 | 'd3': 'assets/plugins/charts-c3/js/d3.v3.min',
8 | 'c3': 'assets/plugins/charts-c3/js/c3.min',
9 | }
10 | });
--------------------------------------------------------------------------------
/website/static/tabler/plugins/fullcalendar/plugin.js:
--------------------------------------------------------------------------------
1 | require.config({
2 | shim: {
3 | 'fullcalendar': ['moment', 'jquery'],
4 | },
5 | paths: {
6 | 'fullcalendar': 'assets/plugins/fullcalendar/js/fullcalendar.min',
7 | 'moment': 'assets/plugins/fullcalendar/js/moment.min',
8 | }
9 | });
--------------------------------------------------------------------------------
/website/static/tabler/plugins/iconfonts/fonts/materialdesignicons/materialdesignicons-webfont.eot:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/fuseumass/hackerforce/dfb6ac1304a7db21853765de9da795e8e9ef20bf/website/static/tabler/plugins/iconfonts/fonts/materialdesignicons/materialdesignicons-webfont.eot
--------------------------------------------------------------------------------
/website/static/tabler/plugins/iconfonts/fonts/materialdesignicons/materialdesignicons-webfont.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/fuseumass/hackerforce/dfb6ac1304a7db21853765de9da795e8e9ef20bf/website/static/tabler/plugins/iconfonts/fonts/materialdesignicons/materialdesignicons-webfont.ttf
--------------------------------------------------------------------------------
/website/static/tabler/plugins/iconfonts/fonts/materialdesignicons/materialdesignicons-webfont.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/fuseumass/hackerforce/dfb6ac1304a7db21853765de9da795e8e9ef20bf/website/static/tabler/plugins/iconfonts/fonts/materialdesignicons/materialdesignicons-webfont.woff
--------------------------------------------------------------------------------
/website/static/tabler/plugins/iconfonts/fonts/materialdesignicons/materialdesignicons-webfont.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/fuseumass/hackerforce/dfb6ac1304a7db21853765de9da795e8e9ef20bf/website/static/tabler/plugins/iconfonts/fonts/materialdesignicons/materialdesignicons-webfont.woff2
--------------------------------------------------------------------------------
/website/static/tabler/plugins/iconfonts/fonts/simple-line-icons/Simple-Line-Icons.eot:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/fuseumass/hackerforce/dfb6ac1304a7db21853765de9da795e8e9ef20bf/website/static/tabler/plugins/iconfonts/fonts/simple-line-icons/Simple-Line-Icons.eot
--------------------------------------------------------------------------------
/website/static/tabler/plugins/iconfonts/fonts/simple-line-icons/Simple-Line-Icons.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/fuseumass/hackerforce/dfb6ac1304a7db21853765de9da795e8e9ef20bf/website/static/tabler/plugins/iconfonts/fonts/simple-line-icons/Simple-Line-Icons.ttf
--------------------------------------------------------------------------------
/website/static/tabler/plugins/iconfonts/fonts/simple-line-icons/Simple-Line-Icons.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/fuseumass/hackerforce/dfb6ac1304a7db21853765de9da795e8e9ef20bf/website/static/tabler/plugins/iconfonts/fonts/simple-line-icons/Simple-Line-Icons.woff
--------------------------------------------------------------------------------
/website/static/tabler/plugins/iconfonts/fonts/simple-line-icons/Simple-Line-Icons.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/fuseumass/hackerforce/dfb6ac1304a7db21853765de9da795e8e9ef20bf/website/static/tabler/plugins/iconfonts/fonts/simple-line-icons/Simple-Line-Icons.woff2
--------------------------------------------------------------------------------
/website/static/tabler/plugins/iconfonts/fonts/themify/themify.eot:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/fuseumass/hackerforce/dfb6ac1304a7db21853765de9da795e8e9ef20bf/website/static/tabler/plugins/iconfonts/fonts/themify/themify.eot
--------------------------------------------------------------------------------
/website/static/tabler/plugins/iconfonts/fonts/themify/themify.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/fuseumass/hackerforce/dfb6ac1304a7db21853765de9da795e8e9ef20bf/website/static/tabler/plugins/iconfonts/fonts/themify/themify.ttf
--------------------------------------------------------------------------------
/website/static/tabler/plugins/iconfonts/fonts/themify/themify.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/fuseumass/hackerforce/dfb6ac1304a7db21853765de9da795e8e9ef20bf/website/static/tabler/plugins/iconfonts/fonts/themify/themify.woff
--------------------------------------------------------------------------------
/website/static/tabler/plugins/iconfonts/fonts/weathericons/weathericons-regular-webfont.eot:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/fuseumass/hackerforce/dfb6ac1304a7db21853765de9da795e8e9ef20bf/website/static/tabler/plugins/iconfonts/fonts/weathericons/weathericons-regular-webfont.eot
--------------------------------------------------------------------------------
/website/static/tabler/plugins/iconfonts/fonts/weathericons/weathericons-regular-webfont.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/fuseumass/hackerforce/dfb6ac1304a7db21853765de9da795e8e9ef20bf/website/static/tabler/plugins/iconfonts/fonts/weathericons/weathericons-regular-webfont.ttf
--------------------------------------------------------------------------------
/website/static/tabler/plugins/iconfonts/fonts/weathericons/weathericons-regular-webfont.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/fuseumass/hackerforce/dfb6ac1304a7db21853765de9da795e8e9ef20bf/website/static/tabler/plugins/iconfonts/fonts/weathericons/weathericons-regular-webfont.woff
--------------------------------------------------------------------------------
/website/static/tabler/plugins/iconfonts/fonts/weathericons/weathericons-regular-webfont.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/fuseumass/hackerforce/dfb6ac1304a7db21853765de9da795e8e9ef20bf/website/static/tabler/plugins/iconfonts/fonts/weathericons/weathericons-regular-webfont.woff2
--------------------------------------------------------------------------------
/website/static/tabler/plugins/input-mask/plugin.js:
--------------------------------------------------------------------------------
1 | require.config({
2 | shim: {
3 | 'input-mask': ['jquery', 'core']
4 | },
5 | paths: {
6 | 'input-mask': 'assets/plugins/input-mask/js/jquery.mask.min'
7 | }
8 | });
--------------------------------------------------------------------------------
/website/static/tabler/plugins/maps-google/plugin.css:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/fuseumass/hackerforce/dfb6ac1304a7db21853765de9da795e8e9ef20bf/website/static/tabler/plugins/maps-google/plugin.css
--------------------------------------------------------------------------------
/website/static/tabler/plugins/maps-google/plugin.js:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/fuseumass/hackerforce/dfb6ac1304a7db21853765de9da795e8e9ef20bf/website/static/tabler/plugins/maps-google/plugin.js
--------------------------------------------------------------------------------
/website/static/tabler/plugins/prismjs/plugin.js:
--------------------------------------------------------------------------------
1 | require.config({
2 | paths: {
3 | 'prismjs': 'assets/plugins/prismjs/js/prism.pack',
4 | },
5 | shim: {
6 | prism: {
7 | exports: "Prism"
8 | }
9 | }
10 | });
11 |
12 | require(['prismjs', 'jquery'], function(prismjs, $){
13 | $(document).ready(function(){
14 | // $('[class^="language-"]').each(function(i, block) {
15 | // Prism.highlightElement(block);
16 | // });
17 | });
18 | });
--------------------------------------------------------------------------------
/website/wsgi.py:
--------------------------------------------------------------------------------
1 | """
2 | WSGI config for website.
3 |
4 | It exposes the WSGI callable as a module-level variable named ``application``.
5 |
6 | For more information on this file, see
7 | https://docs.djangoproject.com/en/2.0/howto/deployment/wsgi/
8 | """
9 |
10 | import os
11 |
12 | from django.core.wsgi import get_wsgi_application
13 |
14 | os.environ.setdefault("DJANGO_SETTINGS_MODULE", "website.settings")
15 |
16 | application = get_wsgi_application()
17 |
--------------------------------------------------------------------------------