<!-- Licensed to the Apache Software Foundation (ASF) under one or more
contributor license agreements.  See the NOTICE file distributed with
this work for additional information regarding copyright ownership.
The ASF licenses this file to You under the Apache License, Version 2.0
(the "License"); you may not use this file except in compliance with
the License.  You may obtain a copy of the License at

  http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License. -->
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="utf-8">
    <title>Tap Home</title>
    {% load staticfiles %}
    <link rel="stylesheet" href="{% static "semantic.min.css" %}">
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.0/jquery.min.js"></script>
    <!-- <script src="{% static "jquery-3.0.0.min.js" %}"></script> -->
    <script src="{% static "semantic.min.js" %}"></script>
    <link href="{% static "styles.min.css" %}" rel="stylesheet">
</head>
<body>
    <div id="main-container">
        <div id="react-container" />
    </div>
    <!-- <script src="{{ STATIC_URL }}js/components/jquery/dist/jquery.min.js"></script>
    <script src="{{ STATIC_URL }}js/components/bootstrap/dist/js/bootstrap.min.js"></script>
    <script src="{{ STATIC_URL }}js/es5-shim.min.js"></script> -->
    <script src="{% static "app.js" %}"></script>
</body>
</html>
