window.alert = function(text) {
    $.notify(text, 'warn');
};
window.cal = new CalHeatMap();

var App = React.createClass({
    displayName: 'namuhub',

    getInitialState: function() {
        return {
            data: null,
            loading: false,
            user: window.user || '',
        };
    },

    load: function(user) {
        var self = this;
        this.setState({loading: true});

        $.ajax({
            url: '/',
            type: 'POST',
            data: {
                user: user
            },
            cache: false,
            success: function(data) {
                if($.isEmptyObject(data)) {
                    self.setState({loading: false});
                    $.notify('데이터를 불러오지 못했습니다.\n기여내역이 없는 경우에도 이 메시지가 표시됩니다.', 'error');
                    return;
                }

                self.setState({loading: false, data: data});
            }
        });
    },

    render: function() {
        return (
            <div className="ui">
                <div className="ui center aligned header">
                    <SearchBox onSubmit={this.load} loading={this.state.loading} user={this.state.user} />
                </div>
                <div className="ui center aligned">
                    <ContribBox data={this.state.data} />
                </div>
            </div>
        );
    }
});

React.render(
    <App />,
    document.getElementById("container")
);

@@ -464,16 +464,44 @@
 'POST',%0A
+            timeout: 15000,%0A
         
@@ -924,16 +924,310 @@
        %7D
+,%0A            error: function(xhr, reason, message) %7B%0A                if(reason == 'timeout') %7B%0A                    self.setState(%7Bloading: false%7D);%0A                    $.notify('%EC%84%9C%EB%B2%84%EA%B0%80 %EB%B0%94%EC%81%98%EB%8B%A4%EB%84%A4%EC%9A%94. %EC%9E%A0%EC%8B%9C %ED%9B%84 %EB%8B%A4%EC%8B%9C %EC%8B%9C%EB%8F%84%ED%95%B4%EC%A3%BC%EC%84%B8%EC%9A%94.%5Cn%EC%95%84%EB%8B%88%EB%A9%B4 %EC%98%A4%EB%A5%98%EA%B0%80 %EB%82%AC%EC%9D%84%EC%A7%80%EB%8F%84..', 'error');%0A                    return;%0A                %7D%0A            %7D,
 %0A       

Add ajax timeout