├── .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 | 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 | 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 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
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 |
6 |

7 | Delete {{ industry }} 8 |

9 |
10 |
11 |

12 | Are you sure you want to delete this industry? This will not delete any associated companies. 13 |

14 | 15 |
16 | {% csrf_token %} 17 | 18 | 19 |
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 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
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 | ![alt text](https://github.com/326-queue/project/blob/development/docs/imgs/data_model_rough_draft.jpg) 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 | ![](imgs/data_model.jpg) 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 |
3 |

{{ title }}

4 |
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 |
6 |

7 | Delete {{ email.internal_title }} 8 |

9 |
10 |
11 |

12 | Are you sure you want to delete this email? {{ email }} 13 |

14 |
15 | {% csrf_token %} 16 | 17 | 18 |
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 |
6 |

7 | Delete {{ lead }} 8 |

9 |
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 |
19 | {% csrf_token %} 20 | 21 | 22 |
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 | blackberryCreated 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 | --------------------------------------------------------------------------------